.updatemenu-dropdown-button-group{ max-height: 50px; overflow-x: hidden; overflow-y: auto; }

1 Introduction

1.1 About

This project results from a collaboration between the groups of E. Levy (Weizmmann, IL) and J. Schacherer (CNRS/Univ. Strasbourg).

1.2 Abstract

Cells and their proteomes constantly evolve and adapt to survive in a wide variety of ecological niches. While phenotypic diversity arises in populations on relatively short timescales (1 to 100s thousand years), longer timescales (1 to 100s million years) are involved in divergence between species. The signatures of both evolutionary processes are carved in each and every single protein sequence through accumulation of mutations, thereby reshaping cell machineries, including protein complexes, signaling pathways, and metabolic pathways for example.

Interestingly, over long timescales, different proteins accumulate mutations at markedly different rates. For example, orthologous proteins in S. cerevisiae and S. pombe share 42% (+/- 14%) sequence identity on average, but some orthologs exhibit higher conservation. For example, actins share 89.7% sequence identity, illustrating that some proteins tolerate mutations more than others. One biophysical property correlates with sequence divergence more than any other and that is protein abundance. The more abundant a protein, the more conserved its sequence. While the abundance-conservation correlation is well established, its mechanistic origin is not well understood. Toxicity associated with mutation-induced misfolding has been suggested as a possible origin, but recent works, including ours (Dubreuil et al. 2019) show it is unlikely the main driving mechanism.

To resolve mechanisms shaping protein evolution, we propose to integrate analyses of sequence evolution across timescales. On the one hand, evolution across distant species shows wide dynamic range of sequence conservation, and reflects how entire proteomes diverge with time. On the other hand, it also presents two important drawbacks. First, that functional information of one species (e.g., protein abundance) is implicitly extrapolated to other species, and such an assumption is frequently incorrect. Second, the order in which mutations occur can hardly be traced. For example, considering a gene duplication event that occurred several million years ago, it is impossible to distinguish mutations that occurred right after the duplication event from those that arose later. Remarkably, both of these limitations are resolved when measuring evolution across a population. Indeed, the short evolutionary distances seen across strains mean that functional information can be extrapolated with high confidence, and mutations can be situated in a narrow time-window. Thus, by resolving these limitations, the integration of evolutionary data across species and strains (Figure @ref(fig:project-goal)) will provide new insights into constraints that biophysics (in particular abundance) versus function place on protein evolution.

Integrating timescales in protein evolution from distant species to populations

(#fig:project-goal)Integrating timescales in protein evolution from distant species to populations

2 Transcriptomics

2.1 Summary

During evolution, mutations arise in genomes, potentially affecting every gene and protein at every site over time. Degrees of sequence divergence within populations and between species reflect the interplay between several interconnected constraints (e.g., genomic, transcriptional, functional, biophysical, structural, environmental…) and underlie phenotypic diversity and organism fitness. Protein expression is the main determinant of a protein’s sequence conservation (e.g., the more a gene is expressed, the more its sequence is conserved). Although this expression-conservation correlation is well established, its mechanistic origin is not well understood.

In this perspective, analyzing variation of gene expression across every layer could reveal the key processes driving evolution among several yeast (S. cerevisiae) isolates sharing an almost identical genetic background, except for newly acquired mutations, notably in protein-coding genes (e.g. Single Nucleotide Variations).

Gene expression is a multi-layered phenomenon in which variations occur differently at each step of the protein synthesis and life (transcription, translation and protein abundance). The exploration of each of these steps is therefore essential to define the constraints affecting the final protein abundance. Given this, we sought to understand how individuals differ in terms of translational regulation and if the translational variation is related to the transcriptional variation.

Therefore, we performed a joint exploration of RNA-seq, ribosome and proteomics profiling on 8 natural Saccharomyces cerevisiae yeast isolates with widely diverse genetic and ecologic origins. We found that the evolutionary constraints on gene expression showed different magnitudes depending on the expression layer. Specifically, expression variations tended to be 10% lower at the translational level, which was related to a phenomenon called post-transcriptional buffering. This phenomenon was more likely to affect some specific genes such as essential genes as well as genes related to protein complexes. Surprisingly, genes being preferentially affected by the post-transcriptional buffering tended to be less expressed than the genes not affected by this phenomenon. Together, these results highlight that variations in gene expression were shaped differently depending on the expression level and multiple factors, including certain functional and physical constraints. We have also been collecting proteomics data for these 8 isolates, which will allow us to assess with high confidence the balance between biophysics (in particular abundance) versus function on protein evolution.

2.2 Our datasets

RNA-seq & Ribo-seq of 8 natural isolates of Saccharomyces cerevisiae

We performed both ribosome profiling and RNA sequencing on eight S. cerevisiae natural isolates coming from very diverse ecological environments and being genetically strongly different (Peter et al.,2018). These isolates were cultivated in Synthetic Complete (SC) up to mid-log phase, harvested and flash-frozen. The RNA-seq and Ribo-seq experiment was performed in collaboration with the Riken institute in Japan.

## Our dataset
isolates = c('CPI','CMP','AMH','CQC','BPL','BTT','BED','BAN')
RNA_seq_data = readRDS(here("data",'RNA_seq.RDS'))
Ribo_seq_data = readRDS(here("data",'Ribo_seq.RDS'))
n = nrow(RNA_seq_data)
strains = fread(here("data",'strains.csv'),data.table = F)
strains = strains[strains$`Standardized name`%in%isolates,c(1,2,3,4,9,10,11,16)]
library(DT)
datatable(strains, rownames = FALSE, caption = NULL,
               filter = "top", escape = FALSE, style = "default",
               width = NULL, height = NULL)

Our data encompassed 3755 genes. The data was normalized using TPM normalization where for each gene in each isolate, we divided the raw count by the ORF length and we applied a per million factor (total read count / 1,000,000)


p1= ggcorr(RNA_seq_data ,method = c("everything", "spearman"), label = T, label_round = 2, midpoint = 0.75, limits = c(0.6,1), size = 2)+
  ggtitle('RNA-seq correlation matrix')
p2=ggcorr(Ribo_seq_data ,method = c("everything", "spearman"), label = T, label_round = 2, midpoint = 0.75, limits = c(0.6,1), size = 2)+
  ggtitle('Ribo-seq correlation matrix')

grid.arrange(p1,p2, ncol=2)

We also calculated a Translation efficiency value which correspond, for each gene in each isolate, to the Ribo-seq TPM value divided by the RNA-seq TPM value. In brief, this represents how well a transcript will be used for translation.

2.3 Overlap with proteomic


proteomic_WIS2 = fread(here::here('output','median-normalized.txt'), data.table = F)
n = nrow(proteomic_WIS2)
a = fread(here::here('output','proteomics-normalized-log10_intensities.tsv'))
rownames(proteomic_WIS2)= a$UNIPROT

prot_gene_name = fread(here::here('output','test.csv'), fill = T, data.table = F) %>% 
                  mutate(Chromosome = recode(Chromosome,'(3)'=V8) ) %>% 
                  dplyr::select(-V8) %>%
                  dplyr::filter(!duplicated(prot_names))
                  

# Calculate mean of normalized intensity per strain
int_strains = pivot_longer(proteomic_WIS2 %>% rownames_to_column('uniprot'), 
             -uniprot, values_to='int2use',
                       names_to = c('strain','bio','tech','day'),
                       names_pattern = "([^_]+)_([^_]+)_([^_]+)_([^_]+)") %>% 
      group_by(uniprot,strain=toupper(strain)) %>% summarize( mean_int = mean_(int2use)) %>%
      pivot_wider(id_cols=uniprot, names_from = strain, names_glue = "{strain}", values_from = mean_int )

proteomic_WIS_mean_filtered = data.frame(int_strains) %>% 
                      drop_na %>% 
                      dplyr::filter(uniprot %in% prot_gene_name$prot_names) %>% 
                      left_join(prot_gene_name[,c('prot_names','ID')], by=c('uniprot'='prot_names'))

all_exp = proteomic_WIS_mean_filtered %>% 
  inner_join(RNA_seq_data %>% rownames_to_column('ID'), by ='ID', suffix=c('_Prot','')) %>% 
  inner_join(Ribo_seq_data %>% rownames_to_column('ID'), by ='ID', suffix=c('_RNA','_Ribo'))


log2_all_exp= all_exp %>% column_to_rownames('ID') %>%
              # transform to log2 to RNA and Ribo (already done for normalized proteomics)
              mutate( across( ends_with(c('_RNA','_Ribo')), .fns = log2) ) %>%
              select(where(is.numeric))
boxplot(log2_all_exp,las=2,ylab='Gene expression (log2)')

Our proteomic data encompassed 3429 genes. The overlap between the two datasets encompassed 2632 (after several filtration of some missing values). The data between the different data sets needed to be normalized so it can be studied together (see graph above). We therefore performed quantile normalization to obtain equally distributed data (see below)

df_rank <- apply(log2_all_exp,2,rank,ties.method="min") 
df_sorted <- data.frame(apply(log2_all_exp, 2, sort))
df_mean <- apply(df_sorted, 1, mean)
index_to_mean <- function(my_index, my_mean){
  return(my_mean[my_index])
}

log2_all_exp_norm <- apply(df_rank, 2, index_to_mean, my_mean=df_mean) %>% as_tibble
rownames(log2_all_exp_norm) = rownames(log2_all_exp)
boxplot(log2_all_exp_norm,las=2, ylab='Normalized gene expression (log2)', title='Quantile-normalized gene expression across RNA/Ribo/Proteomics')

3 Post transcriptional buffering

The post-transcriptional buffering (PTB) is a phenomenon where transcriptional variations tend to be buffered as the expression process progresses (add ref). It has been observed in different situations… To be completed

It is possible to detect this phenomenon in different ways:

3.1 Correlation between isolate

Using the quantile normalized data, we performed Spearman correlation between all the isolate profile in each expression level separately (using the median value of the replicate for the proteomic data)

Comparing the correlation values, it reveals that the profiles tended to be more and more similar as the expression process progresses (increasing of the correlation coefficient values), bringing a first proof of the presence of the phenomenon across our 8 isolates.

library(corrr)
cor_prot= select(log2_all_exp_norm, ends_with('_Prot')) %>%  correlate(method = 'sp') %>% column_to_rownames('term')
#> 
#> Correlation method: 'sp'
#> Missing treated using: 'pairwise.complete.obs'
cor_rna= select(log2_all_exp_norm, ends_with('_RNA')) %>%  correlate(method = 'sp') %>% column_to_rownames('term')
#> 
#> Correlation method: 'sp'
#> Missing treated using: 'pairwise.complete.obs'
cor_ribo= select(log2_all_exp_norm, ends_with('_Ribo')) %>%  correlate(method = 'sp') %>% column_to_rownames('term')
#> 
#> Correlation method: 'sp'
#> Missing treated using: 'pairwise.complete.obs'

cor_exp= tibble(RNA = cor_rna[lower.tri(cor_rna)],
                Ribo = cor_ribo[lower.tri(cor_ribo)],
                Prot = cor_prot[lower.tri(cor_prot)])
df_cor_exp = pivot_longer(cor_exp, everything()) %>% 
              arrange(name) %>% mutate(experiment = factor(name))
pair_exp = unique(df_cor_exp$experiment) %>% as.character() %>% combn(m = 2) %>% as_tibble()

ggplot(df_cor_exp,aes(x=experiment, y=value,fill=experiment))+
  geom_boxplot()+
  theme_classic()+
  xlab('')+
  ylab('Rho')+
  stat_compare_means(comparisons =pair_exp)

3.2 Variation quantification

It is also possible to explore PTB by quantifying the variation in each pairwise comparison. Basically, for each gene in each isolate pairwise comparison, we use the absolute value of the log2 transformed fold to represent the intensity of the expression variation between the 2 isolates. The more this value increases, the more a gene displays variable regulation between isolate.

We calculated this value in each pairwise comparison, for each gene and at each expression level. We found that the intensities of the variations were decreasing as long as the expression process progresses, supporting once again the presence of the PTB phenomenon in our dataset.

#remotes::install_github("TimTeaFan/dplyover")
library(dplyover)
# calculate fold change pairwise for each experiment
fc_prot = select(log2_all_exp_norm,ends_with('_Prot')) %>% 
  rename_with(.fn=str_remove_all,pattern = "_Prot") %>%
  transmute(across2x(everything(), everything(),.fns = ~foldchange(.x,.y),.comb = 'minimal'),
            experiment='Prot')%>% 
  pivot_longer(-experiment,names_to='pair',values_to = 'fc')
fc_rna = select(log2_all_exp_norm,ends_with('_RNA')) %>% 
  rename_with(.fn=str_remove_all,pattern = "_RNA") %>%
  transmute(across2x(everything(), everything(),.fns = ~foldchange(.x,.y),.comb = 'minimal'),
            experiment='RNA')%>% 
  pivot_longer(-experiment,names_to='pair',values_to = 'fc')
fc_ribo = select(log2_all_exp_norm,ends_with('_Ribo')) %>% 
  rename_with(.fn=str_remove_all,pattern = "_Ribo") %>%
  transmute(across2x(everything(), everything(),.fns = ~foldchange(.x,.y),.comb = 'minimal'),
            experiment='Ribo') %>% 
  pivot_longer(-experiment,names_to='pair',values_to = 'fc')

# combine all pairwise foldchange
fc_exp = bind_rows(fc_prot,fc_rna,fc_ribo) %>% arrange(experiment,pair)

pair_exp=unique(fc_exp$experiment) %>% as.character() %>% combn(m = 2) %>% as_tibble()

ggplot(fc_exp,aes(experiment, log2(fc), fill=experiment))+
  geom_boxplot()+
  scale_y_log10()+
  stat_compare_means(comparisons = pair_exp)+
  theme_classic()+
  xlab('')+
  ylab('|log2(FC)|')

3.3 Euclidean distances between the profiles

Euclidean distances can also give information on how variable datasets can be. We once again used the quantile normalized data to calculate Euclidean distances between the profile in each expression level.

Consistently to the previous results, we found that the distances were lower and lower as the expression process progresses, suggesting once again that the expression variations were decreased. This also supported the presence of the PTB phenomenon

# dist_exp = log2_all_exp_norm %>% add_column(id=all_exp$ID) %>%
#   pivot_longer(cols = -id,
#                names_to = c('strain','experiment'), 
#                names_pattern = '(.+)_(.+)', 
#                values_to = 'exp') %>% 
#   pivot_wider(id_cols = c('id','experiment'),names_from='strain', values_from = 'exp') %>%
#   group_by(experiment) %>% 
#   mutate( across2x(AMH:CQC, AMH:CQC, .fns =dist, method= 'euclidean', .comb = 'minimal'))     
#            

b=lapply(c('RNA','Ribo','Prot'), function(i){
  i<<-i
  a = log2_all_exp_norm[,grep(i, colnames(log2_all_exp_norm))]
  a = dist(t(a))
  a = as.matrix(a)
  a= a[lower.tri(a)]
  return(a)
})
names(b)=  c('RNA','Ribo','Prot')
b=as.data.frame(b)
b = melt(b)
#> No id variables; using all as measure variables

pair_exp=unique(b$variable) %>% as.character() %>% combn(m = 2) %>% as_tibble()

ggplot(b,aes(x=variable,y=value, fill=variable))+
  geom_boxplot()+
  theme_classic()+
  ylab('Euclidean distance')+
  xlab('')+
  stat_compare_means(comparisons = pair_exp)

3.4 Variance comparison

A simple variance calculation can also give a clue on the variation intensity of gene expression. We calculated the variance in all dataset for each gene and found that it tended to be higher at the transcription level, lower at the protein abundance level (with the translation level being in the middle), which was in accordance with the previous exploration


a=lapply(c('RNA','Ribo','Prot'), function(i){
  i<<-i
  a = log2_all_exp_norm[,grep(i, colnames(log2_all_exp_norm))]
  a=apply(a,1 ,var)
  return(a)
})
names(a)= c('RNA','Ribo','Prot') 
a =as.data.frame(a)
b=a
b = melt(b)
#> No id variables; using all as measure variables

pair_exp=unique(b$variable) %>% as.character() %>% combn(m = 2) %>% as_tibble()

ggplot(b,aes(x=variable,y=value, fill=variable))+
  geom_boxplot()+
  theme_classic()+
  ylab('Variance')+
  xlab('')+
  stat_compare_means(comparisons = pair_exp)+
  scale_y_log10()

4 Proteomics experiment

4.1 Experiment design

For this experiment, we selected eight strains from a population of 1,011 S. cerevisiae isolates, representing the overall ecological, geographical and genetic diversity (Figure @ref(fig:phylo-8-strain).

The eight strains were grown on synthetic defined media (SD). We carefully monitored the strains growth to harvest cells close to the mid-log phase (OD ~ 0.5). Then, we proceed to wash the samples in PBS and flash-freeze cell pellets for a whole-lysate proteomics profiling.

For each strains, we prepared biological replicates that originated from two distinct colonies which and two technical replicates.

Phylogenetic tree of 1011 *cerevisiae* isolates highlighting the 8 strains used for RNASeq/RiboSeq/proteomics exepriment

(#fig:phylo-8-strain)Phylogenetic tree of 1011 cerevisiae isolates highlighting the 8 strains used for RNASeq/RiboSeq/proteomics exepriment

Altogether there were 32 samples of yeast cell pellets including 4 replicates (two biological and two technical) that we sent to the Weizmann proteomics unit. (INPCM).

The samples submitted correspond to 4mL cultures with OD ranging from 0.4-0.8.

OD of samples (table)

4.2 Sample preparation

The cell pellets were subjected to lysis and in solution tryptic digestion using the S-Trap method (by Protifi) followed by a solid phase extraction cleaning step (Oasis HLB).

4.3 Liquid chromatography mass spectrometry

The resulting peptides were analyzed using nanoflow liquid chromatography (nanoAcquity) coupled to high resolution, high mass accuracy mass spectrometry (Thermo Exploris 480). Each sample was analyzed on the instrument separately in a random order in discovery mode.

4.4 Peptide identification and quantification

Raw data was processed with MaxQuant v1.6.6.0. The data were searched with the Andromeda search engine against a database containing protein sequences of Saccharomyces cerevisiae as downloaded from Uniprot.org, and appended with common lab protein contaminants.

The following modifications were defined for the search: Fixed modification- cysteine carbamidomethylation. Variable modifications- methionine oxidation and protein N-terminal acetylation.

The quantitative comparisons were calculated using Perseus v1.6.0.7. Decoy hits were filtered out and only proteins that were detected in at least two replicates of at least one experimental group were kept.

4.5 Loading Mass Spectrometry Results

First, we read the MaxQuant output file (CSV/XLSX format) containing all the hits. A hit corresponds to the set of peptides that were matched to a single protein group. Note: protein groups may contain one or multiple identified proteins (including contaminants)

#> Total number of proteins hits: 3635
Sample Names:
1 amh_1_1_12
2 amh_1_2_10
3 amh_2_1_12
4 amh_2_2_12
5 ban_1_1_12
6 ban_1_2_10
7 ban_2_1_10
8 ban_2_2_10
9 bed_1_1_12
10 bed_1_2_10
11 bed_2_1_12
12 bed_2_2_10
13 bpl_1_1_10
14 bpl_1_2_12
15 bpl_2_1_10
16 bpl_2_2_12
17 btt_1_1_12
18 btt_1_2_10
19 btt_2_1_12
20 btt_2_2_12
21 cmp_1_1_10
22 cmp_1_2_12
23 cmp_2_1_10
24 cmp_2_2_10
25 cpi_1_1_12
26 cpi_1_2_10
27 cpi_2_1_12
28 cpi_2_2_12
29 cqc_1_1_10
30 cqc_1_2_12
31 cqc_2_1_10
32 cqc_2_2_10

Statistics of proteomics hits:

3635 total hits

  • 20 contaminants
  • 53 reversed sequences
  • 3562 proteins identified:
    • 3485 unique proteins
    • 77 multiple proteins (with 77 duplicated pairs)

In this proteomics experiment, a large number of proteins were identified and quantified.

The quantified cellular proteome roughly amounts to half of the reference proteome sequences of the yeast S. cerevisiae S288C and close 70% of the cytoplasmic proteins detectable through MS-profiling of a whole-cell lysate.

5 Data processing

Before normalizing intensities, we first need to discard some hits because they are not suitable for analysis:

  1. contaminants (identifier starts with CON)
  2. reversed sequences (identifier starts with REV)
  3. multiple hits (peptides matching several proteins)
  4. not enough unique peptides (low confidence identification (< 2 peptides))
# Filter hits
ms1=filter_hits(ms0)
#> Discarding problematic hits...
#> *   104 = less than 2 unique peptides
#> *    20 = contaminated hits
#> *    52 = reversed sequences
#> *    57 = multi-protein hits
#> -----------------------------------------
#>  -> 206   hits eliminated
#>  => 3429  remaining hits for analysis

int_raw=read_maxquant(MAXQUANT.files$proteinGroups, zero.to.na = T, int_type = 'Intensity', pep_type = 'Unique peptides') %>% 
  filter_hits(verbose = F) %>% 
  dplyr::select(uniprot=majority_protein_i_ds,starts_with("intensity_")) %>% 
            #mutate(across(where(is.integer64), ~as.integer(.))) %>% # make sure to use numeric and not integer
            as.data.frame() %>% column_to_rownames('uniprot') %>%
            rename_with(everything(),.fn=gsub, pattern='intensity_', replacement='') %>%
            rename_with(.fn = str_to_upper)
#> Total number of proteins hits: 3635

5.1 Processing quantified intensities

Following the aim of this experiment, we wish to compare the variation of protein expression between strains.

First, we compute the average intensities over the replicates.

Then, we discard proteins hits with missing values for XX strains or for YY replicates types of media.

Finally, we normalize the intensities by transforming to log2 and subtracting each sample’s median. (cf formula below)

Normalization method = Equalizing medians

\[ norm.int_{sample} = log2(raw.int_{sample}) - log2(median_{sample}) \] We filter out hits that contains missing values for either strains or replicates

# Process intensities
is.integer64 <- function(x) inherits(x, "integer64")

int_lfq = ms1 %>% dplyr::select(uniprot=majority_protein_i_ds,starts_with("lfq")) %>% 
            #mutate(across(where(is.integer64), ~as.integer(.))) %>% # make sure to use numeric and not integer
            as.data.frame() %>% column_to_rownames('uniprot') %>%
            rename_with(everything(),.fn=gsub, pattern='lfq_intensity_', replacement='') %>%
            rename_with(.fn = str_to_upper)
            

int_md_norm = center_intensities(int_lfq, center='median', tolog2=T) %>% 
          as.data.frame() %>%
          rename_with(everything(),.fn =gsub, pattern='lfq_intensity_', replacement='') %>% 
          rename_with(.fn = str_to_upper)
#> Normalize log2-transformed intensities by the samples  median ...
         
# TRYING DIFFERENT NORMALIZATIONS SCHEME (NOT READY)
INT_NORM = normalize_intensities(int = int_raw, design = df.group)
#> Input data checked. All fields are valid.
#> Sample check: More than one sample group found
#> Sample replication check: All samples have replicates
#> No RT column found, skipping RT processing
#> No RT column specified (column named 'RT') or option not specified Skipping RT normalization.
TAB_NORM = kbl(names(INT_NORM@normalizations),row.names = T,col.names = 'Normalizations:',position = 'left') %>% 
            kable_paper("striped", full_width = F) %>% 
            kable_styling(position='left')  

            
int_norm = int_md_norm %>% rownames_to_column('uniprot') 
int_norm_ids = int_norm %>% dplyr::left_join(sc_identifiers,by=c('uniprot'='UNIPROT')) %>% filter(!duplicated(uniprot))
#compare_exp(log2(int_raw),int_loess_norm, all=T)

long_int_norm = pivot_longer(int_norm  , cols=-uniprot, values_to='int2use',
                             names_to = c('strain','bio','tech','day'),
                             names_pattern = "([^_]+)_([^_]+)_([^_]+)_([^_]+)") %>%
                group_by(strain,uniprot) %>% mutate(na_rep = sum.na(int2use))

# Intensities across strains  (default is average)
int_by_strain = pivot_wider(long_int_norm ,
              id_cols=uniprot,
              names_from = 'strain',
              names_glue = "{strain}",
              values_from = "int2use",
              values_fn=mean_
              )

na_by_strain = pivot_wider(long_int_norm,
              id_cols=uniprot,
              names_from = c('strain'),
              names_glue = "na_rep_{strain}",
              values_from = "int2use",
              values_fn=sum.na
              )

df_strains= left_join(int_by_strain,na_by_strain) %>% 
  rowwise %>%
  mutate( na_strains = sum.na(c_across(cols = starts_with('lfq_int'))) )
#> Joining, by = "uniprot"

int_all = int_norm  %>% column_to_rownames('uniprot') %>% as.data.frame()

# Removing hits with missing values for more than one strain (using average intensities over replicates)
ms2= df_strains %>% filter(na_strains < 1)
int_filt_strains = ms2 %>% dplyr::select(-starts_with('na')) %>% column_to_rownames('uniprot') %>% as.data.frame()

# Save processed & normalized intensities data
#write_rds(df_strains,here::here('output',sprintf("%02d-normalized-intensities.rds",chap_cur)))
library(MsCoreUtils)
#> 
#> Attaching package: 'MsCoreUtils'
#> The following objects are masked from 'package:data.table':
#> 
#>     %between%, between
#> The following object is masked from 'package:dplyr':
#> 
#>     between
#> The following object is masked from 'package:stats':
#> 
#>     smooth
int_norm_nona = int_norm %>% drop_na()
int_norm_bpca = impute_bpca(int_norm) %>% as_tibble() %>% add_column(uniprot = int_norm_ids$uniprot)
#> Loading required namespace: pcaMethods
#colSums(is.na(int_norm_nona))
#draw_scatterplots(int_norm_nona)

6 Quality control

First, we retrieve the LFQ-intensities of each protein hit (label-free quantitation).

# get lfq-peptide intensities (lfq=label-free quantitation) 
intensities = ms1 %>% dplyr::select(uniprot=majority_protein_i_ds,starts_with("lfq")) 
# Convert intensities to long format 
long_int_all = get_long_intensities(intensities) %>% mutate(int2use = log10_int)

6.1 Total sample intensities

#> Joining, by = "sample"
Total intensities per sample

(#fig:tot_int)Total intensities per sample

6.2 Boxplot of sample raw intensities

We want to inspect the distribution of peptide intensities between strains. In addition, we will also observe in how many replicates each hit was quantified.

The distribution of peptide intensities between all strains does not show strong differences of expression:

Distribution of expression for ubiquitous hits (i.e. detected in all strains)

(#fig:boxplot-int_ub)Distribution of expression for ubiquitous hits (i.e. detected in all strains)

The median peptide intensity are remarkably similar (~108 or 7.9 in log10) between strains:
strain name AMH BAN BED BPL BTT CMP CPI CQC
median_exp 7.9 7.92 7.92 7.9 7.92 7.95 7.91 7.97
However, the peptide intensities can vary widely (>10-fold) when a hit is not detected across all replicates:
# replicates 1 2 3 4
median_exp 6.82 6.92 7.04 8

On average, peptide intensities are higher when a hit is found in more than one replicate

6.3 Count of missing hits per sample

The following barplot shows the range of missing hits per samples.

#> Joining, by = "sample"
Count of missing hits per samples

(#fig:missing-hit-samples)Count of missing hits per samples

CQC and CMP are the two strains containing the most missing values.

Particularly, the first biological replicate of those strains have twice more missing protein intensities (509 hits so 10-16% NAs) while the rest of the samples have on average about only 231 hits missing (4% to 9% NAs).

We then look at hits quantified as a function of the number of strains in which at least one peptide was quantified. (non-ubiquitous hits)

Distribution of expression for hits not detected in all strains

(#fig:missing-hit)Distribution of expression for hits not detected in all strains

# proteins # expressing strains median exp. (log10) % quantified cum. % cum. % (decreasing)
2280 8 8.20 66.5% 100.0% 66.5%
305 7 7.45 8.9% 33.5% 75.4%
209 6 7.24 6.1% 24.6% 81.5%
144 5 7.12 4.2% 18.5% 85.7%
111 4 7.02 3.2% 14.3% 88.9%
96 3 6.99 2.8% 11.1% 91.7%
90 2 6.96 2.6% 8.3% 94.3%
84 1 6.89 2.4% 5.7% 96.8%
110 0 6.78 3.2% 3.2% 100.0%

Proteins expressed across less strains have lower median peptide intensity. Nevertheless, almost two thirds (66.5%) of the protein hits were detected in all strains. About 86% protein hits were expressed in the majority of the strains (at least 5 out of 8 strains).

6.4 Missing hits across samples

Furthermore, we can check whether the proportion of missing values is equally distributed among all samples.

Number of quantified intensities across samples

(#fig:na-samples)Number of quantified intensities across samples

6.5 Coefficient of variations

Coefficient of variations correspond to the percent of variance relative to the mean. The following boxplots show how variable protein expression is, across strains or across biological replicates, before and after normalization.

Coefficient of variations (%) in each sample and per strains before and after processing data (filtering and normalization)

(#fig:boxplot-cv)Coefficient of variations (%) in each sample and per strains before and after processing data (filtering and normalization)

(#tab:boxplot-cv)Coefficient of variation - intensities per strain
strain min q25 md q75 max
amh 0.00 0.46 0.74 1.20 11.96
ban 0.01 0.52 0.81 1.29 15.35
bed 0.01 0.44 0.72 1.18 13.78
bpl 0.01 0.47 0.79 1.33 17.42
btt 0.01 0.52 0.81 1.33 14.15
cmp 0.01 0.77 1.24 1.94 14.66
cpi 0.01 0.42 0.67 1.09 13.47
cqc 0.01 1.24 1.91 2.81 21.60
(#tab:boxplot-cv)Coefficient of variation - intensities per biological replicate
biological_rep min q25 md q75 max
amh-1 0 0.18 0.39 0.79 20.06
amh-2 0 0.19 0.39 0.80 8.71
ban-1 0 0.29 0.60 1.12 14.13
ban-2 0 0.23 0.49 0.90 16.44
bed-1 0 0.15 0.36 0.71 10.64
bed-2 0 0.30 0.68 1.25 16.97
bpl-1 0 0.19 0.44 0.89 16.35
bpl-2 0 0.20 0.48 0.96 19.18
btt-1 0 0.29 0.59 1.10 15.01
btt-2 0 0.17 0.39 0.80 15.62
cmp-1 0 0.33 0.70 1.27 21.19
cmp-2 0 0.16 0.36 0.77 10.67
cpi-1 0 0.18 0.42 0.78 16.48
cpi-2 0 0.18 0.39 0.78 21.08
cqc-1 0 0.54 1.24 2.38 18.59
cqc-2 0 0.38 0.86 1.52 14.99
(#tab:boxplot-cv)Coefficient of variation - intensities per strain
strain min q25 md q75 max
AMH 0.04 1.26 2.17 3.94 49.23
BAN 0.08 1.34 2.30 4.30 60.07
BED 0.11 1.22 2.17 3.96 50.95
BPL 0.03 1.28 2.30 4.45 75.28
BTT 0.02 1.36 2.39 4.47 58.83
CMP 0.06 2.22 3.74 6.40 141.42
CPI 0.05 1.13 2.02 3.60 50.19
CQC 0.18 3.31 5.60 9.20 90.23
(#tab:boxplot-cv)Coefficient of variation - intensities per biological replicate
biological_rep min q25 md q75 max
AMH-1 0 0.47 1.11 2.53 63.80
AMH-2 0 0.51 1.12 2.49 39.87
BAN-1 0 0.64 1.55 3.45 58.00
BAN-2 0 0.63 1.41 2.78 63.59
BED-1 0 0.43 1.03 2.27 44.53
BED-2 0 0.88 1.99 3.91 71.41
BPL-1 0 0.49 1.20 2.73 51.93
BPL-2 0 0.52 1.34 3.03 91.56
BTT-1 0 0.57 1.42 3.35 58.80
BTT-2 0 0.48 1.13 2.54 45.46
CMP-1 0 0.91 2.04 4.00 71.14
CMP-2 0 0.44 1.03 2.35 38.36
CPI-1 0 0.52 1.18 2.48 52.70
CPI-2 0 0.49 1.10 2.49 95.71
CQC-1 0 1.64 3.54 7.43 63.55
CQC-2 0 1.08 2.48 4.55 63.29

6.6 Expression distributions

To highlight the strength of normalization, we also show the density distribution of expression before and after normalization using each of the following normalization methods:

Normalizations:
1 log2
2 VSN
3 GI
4 median
5 mean
6 Quantile
7 CycLoess
8 RLR
draw_normalization_density(int_raw,int_lfq,df.group)
#> Input data checked. All fields are valid.
#> Sample check: More than one sample group found
#> Sample replication check: All samples have replicates
#> No RT column found, skipping RT processing
#> No RT column specified (column named 'RT') or option not specified Skipping RT normalization.
#> Joining, by = "sample"
#> Joining, by = "sample"

6.7 Compare all-vs-all expression

6.7.1 Scatterplots

# scatterplots between all samples
scmat_all=draw_scatterplots(datain=int_all)
print(scmat_all)

6.7.2 Heatmap correlation

# heatmap correlation
cs_all=compute_samples_correlation(int_all)
#> Compute pairwise samples correlation (Spearman)...
#> 
#> Correlation method: 'spearman'
#> Missing treated using: 'pairwise.complete'
COR_RANGE = range( cs_all[row(cs_all) == (col(cs_all) - 1)] )

by_sample = df.group %>% column_to_rownames("sample")
hm_all=draw_heatmap_samples(mcor = cs_all,df.group=by_sample,col.group = col.group)

The heatmap correlations of all samples show the high correlation of expression between replicates and between most strains: [0.824 - 0.992]

The expression from the 1st biological replicates of strains CQC and CMP seem slighlty less correlated to the other samples.

6.7.3 Principle Component Analysis

Finally, the PCA reveals the distance between each sample.

int_all_scaled = scale(int_all,center=T, scale = T)
make_pca(na.omit(int_all_scaled), with_labels=T,col_by_group=1:4)

7 Strains expression comparison

7.1 Scatterplots

Initially, we can look at the scatterplots of intensities all-versus-all samples.

# scatterplots between strains
scmat_strains=draw_scatterplots(datain=int_filt_strains)
print(scmat_strains)

7.2 Heatmap Correlation

We then compute spearman rank correlations of intensities between all samples.

# heatmap correlation
cs_strains=compute_samples_correlation(int_filt_strains)
#> Compute pairwise samples correlation (Spearman)...
#> 
#> Correlation method: 'spearman'
#> Missing treated using: 'pairwise.complete'
COR_RANGE = range( cs_strains[row(cs_strains) == (col(cs_strains) - 1)] )

hm_strains=draw_heatmap_samples(mcor = cs_strains,df.group=c(),col.group = col.group)

The heatmap correlations show the high correlation of expression between strains: [0.942 - 0.977]

7.3 Principle Component Analysis

Finally, the PCA reveals the distance between each sample.

int_scaled_strains = scale(int_filt_strains,center=T, scale = T)
make_pca(na.omit(int_scaled_strains), with_labels=F,col_by_group=1:2)

8 Differential Expression

We then compare the protein expression between strains for each pairwise comparison (28 unique pairwise combinations)

To detect differentially expressed genes, we use the limma analysis on normalized protein expression.

8.1 Volcano plots

First, we can look at the volcano plots (log-foldchange vs qvalue) for each unique pairwise comparison.

#ind_na_rows  = find_na_rows(int_norm,as.indices = T)
df_imputed = tibble( uniprot = rownames(int_norm), is_imputed = rowSums( is.na(int_norm))>0)
#int_norm_bpca$imputed = rowSums( is.na(int_norm))>0
volcPlot(INPUT=int_norm_bpca, IMPUTED=df_imputed, MIN_LFC=2, MIN_PVAL=0.01, WHICH='both', TOPN = 20)
#> Joining, by = c("ID", "pValue", "qValue", "EffectSize",
#> "comparison", "sig", "log10_qvalue", "SGD", "ORF",
#> "UNIPROT", "GENENAME", "is_imputed")

8.2 Differentially expressed genes

# Without NA
volcano_data =  get_volcano_data(input_data=int_norm_nona, which='both',
                            min_lfc=2, min_pval=0.01, topn = 20)
df_limma = bind_rows(volcano_data) %>% as_tibble()
dfe_nona = subset(df_limma,sig!='Non significant')
N_DFE_NONA = nrow(dfe_nona)
NPROT_DFE_NONA =  n_distinct(dfe_nona$ID)

# With imputed expression to replace NA
dfe =  get_volcano_data(input_data=int_norm_bpca, which='both',
                            min_lfc=2, min_pval=0.01, topn = 20) %>% 
                bind_rows %>% as_tibble() %>% filter(sig!='Non significant')

N_DFE_IMPUTE = nrow(dfe)
NPROT_DFE_IMPUTE =  n_distinct(dfe$ID)

down = dfe %>% group_by(ID) %>% dplyr::filter(sig=='Downregulated') %>%
       summarize( strains_down = paste0(comparison,collapse=' '),
                  down_AMH = str_count(strains_down,'AMH-'),
                  down_BAN = str_count(strains_down,'BAN-'),
                  down_BED = str_count(strains_down,'BED-'),
                  down_BPL = str_count(strains_down,'BPL-'),
                  down_BTT = str_count(strains_down,'BTT-'),
                  down_CMP = str_count(strains_down,'CMP-'),
                  down_CPI = str_count(strains_down,'CPI-'),
                  down_CQC = str_count(strains_down,'CQC-'))
up = dfe %>% group_by(ID) %>% dplyr::filter(sig=='Upregulated') %>%  
      summarize( strains_up = paste0(comparison,collapse=' '),
                  up_AMH = str_count(strains_up,'AMH-'),
                  up_BAN = str_count(strains_up,'BAN-'),
                  up_BED = str_count(strains_up,'BED-'),
                  up_BPL = str_count(strains_up,'BPL-'),
                  up_BTT = str_count(strains_up,'BTT-'),
                  up_CMP = str_count(strains_up,'CMP-'),
                  up_CPI = str_count(strains_up,'CPI-'),
                  up_CQC = str_count(strains_up,'CQC-'))
# get_dfe(int_norm, MIN_LFC=2, MIN_PVAL=0.01,  WHICH='both', TOPN = 20) %>% remove_rownames() %>% 
#   dplyr::left_join(sc_identifiers, by=c('ID'='UNIPROT'))

# Number of times a hit is differentially expressed
df_dfe = dfe %>% left_join(janitor::tabyl(dfe,ID,sig)) %>%
         left_join(down) %>% left_join(up) %>%
         rename(uniprot=ID) %>% 
         group_by(uniprot,comparison) %>% 
        mutate( n_strains_up = sum(c_across(starts_with('up_')) !=0 ),
                n_strains_down = sum(c_across(starts_with('down_'))!=0)) %>%
        replace_na(list(n_strains_up=0,n_strains_down=0)) %>%
        left_join(evo_yeast, by=c('uniprot'='UNIPROT')) 
#> Joining, by = "ID"
#> Joining, by = "ID"
#> Joining, by = "ID"
  

df_dfe_annot = df_dfe %>%
          left_join(sc_annotation_orf,by=c('uniprot'='UNIPROT')) %>%
  mutate(uniprot_link = paste0("<a href='https://www.uniprot.org/uniprot/",uniprot,"'>",uniprot,"</a>"),
         sgd_link = paste0("<a href='https://www.yeastgenome.org/locus/",SGD,"'>",SGD,"</a>"),
         regulated = Downregulated+Upregulated) %>% 
  dplyr::relocate(uniprot,uniprot_link,sgd_link,regulated,Downregulated,Upregulated, 
                  GENENAME,ORF,PNAME,'FUNCTION','BIOPROCESS_all','ORTHO','OTHER')

We get 225 genes differentially expressed when excluding genes with missing expression in any samples.

On average, each gene is detected in 0.2866242 unique pairwise strain comparison.

After imputation of missing expression with bpca (Bayesian missing value imputation), we get 230 more genes differentially expressed (455).

On average, each gene is detected in 0.2750907 unique pairwise strain comparison.

The following table shows the list of differentially expressed genes across all unique pairwise comparison, with annotations data and conservation/snp information.

library(kableExtra)
library(formattable)
library(DT)

ft_dt = df_dfe_annot %>% 
  formattable(
    list(
      `Downregulated` = color_tile("white", "red"),
      `Upregulated` = color_tile("white", "blue"),
      `regulated` = color_tile("white", "gray")
    )
) %>% as.datatable(
        options = list(
            fixedHeader=T,
            paging = TRUE, pageLength = 20,  ## paginate the output and #rows for each page
            scrollY = TRUE,   ## enable scrolling on X/Y axis
            #autoWidth = TRUE, ## use smart column width handling
            server = FALSE,   ## use client-side processing
            dom = 'Bfrtip', buttons = list('csv', 'excel', list(extend = 'colvis')),
            fixedColumns = list(leftColumns = 1),
            columnDefs = list(list(width = '50px', visible=TRUE, targets = "_all"))
          ),
  extensions = c('FixedHeader','FixedColumns','Buttons'),
  selection = 'single',           ## enable selection of a single row
  filter = 'bottom',              ## include column filters at the bottom
  rownames = FALSE,               ## don't show row numbers/names
  width = NULL, 
  height = NULL,
  caption = NULL
) %>% 
   formatStyle(columns = 1:30, target= 'row',lineHeight='100%', `font-size` = '12px')

ft_dt

8.3 Functional map for diffentially expressed genes

library(treemap)
library(d3Tree)
treemap(df_dfe_annot, index=c("BIOPROCESS_all", "comparison"), vSize='regulated', vColor="EffectSize", type="value") 
treemap(df_dfe_annot, index=c("BIOPROCESS_all", "GENENAME"), vSize="regulated", vColor="EffectSize", type="value",)

8.4 Heatmap of expression differences

dat_scaled = int_scaled_strains %>% as.data.frame() %>% rownames_to_column('uniprot')

# Transpose the matrix to calculate distance between experiments, row-wise
d_pair <- dat_scaled[,-1] %>% t() %>%
  dist(.,method = "euclidean", diag = FALSE, upper = FALSE)
# Calculate the distance between proteins row-wise 
d_prot <- dat_scaled %>% dplyr::filter( uniprot %in% dfe$ID) %>% dplyr::select(-uniprot) %>% dist(.,method = "euclidean", diag = FALSE, upper = FALSE)

dfe_lfc = bind_rows(volcano_data) %>% 
          pivot_wider(id_cols=ID, names_from = 'comparison', values_from = 'EffectSize') %>% 
          dplyr::filter(ID %in% dfe$ID) %>% left_join(sc_identifiers,by=c('ID'='UNIPROT')) %>%
          column_to_rownames('GENENAME') %>% dplyr::select(-ORF,-ID,-SGD)

# Heatmap of differentially expressed genes
p_dfe= pheatmap::pheatmap(dfe_lfc,fontsize = 5,cutree_rows = 10,cellwidth = 5,cellheight =5,border_color = NA) %>% 
        ggplotify::as.ggplot()

dfe_exp = dat_scaled %>% dplyr::filter( uniprot %in% dfe$ID) %>%  left_join(sc_identifiers,by=c('uniprot'='UNIPROT'))  

#p_dfe_exp=pheatmap::pheatmap(dfe_exp %>% dplyr::select(-ORF,-uniprot,-SGD) %>%column_to_rownames('GENENAME'),
#                             fontsize = 8,cellwidth = 4,cellheight =4,border_color = NA,treeheight_col = 10)

textcol <- "grey40"
# further modified ggplot
p_exp <- ggplot(dfe_exp%>%pivot_longer(where(is.numeric), names_to = 'strain', values_to='exp'), 
            aes(x=strain, y=GENENAME, fill=exp))+
  geom_tile(colour="white", size=0.1)+
  labs(x="", y="")+
  scale_fill_gradientn(colours = colorRampPalette(rev(brewer.pal(n = 7, name =
  "RdYlBu")))(100))+
  #scale_fill_manual(values=c("#d53e4f", "#f46d43", "#fdae61", "#fee08b", "#e6f598", "#abdda4", "#ddf1da"), na.value = "grey90")+
  theme_grey(base_size=10)+
  theme(legend.position="right", legend.direction="vertical",
        legend.title=element_text(colour=textcol),
        legend.margin=margin(grid::unit(0, "cm")),
        legend.text=element_text(colour=textcol, size=7, face="bold"),
        legend.key.height=grid::unit(0.8, "cm"),
        legend.key.width=grid::unit(0.2, "cm"),
        axis.text.x=element_text(size=8, angle=90,colour=textcol,hjust = 1),
        axis.text.y=element_text(vjust=0.2, colour=textcol),
        axis.ticks=element_line(size=0.4),
        plot.background=element_blank(),
        panel.border=element_blank(),
        plot.margin=margin(0.7, 0.4, 0.1, 0.2, "cm"),
        plot.title=element_text(colour=textcol, hjust=0, size=14, face="bold")
        ) + coord_equal()
p_exp

9 Session Info

9.1 Appendix: All code for this report

# example R options set globally
options(width = 60)

# example chunk options set globally
knitr::opts_chunk$set(
  comment = "#>",
  collapse = TRUE,
  out.width="100%"
)
knitr::include_graphics("images/Fungi-SpeciesTree-v7.png")
chap_cur = 00
# Make sure the install repositories for dependencies are CRAN + Bioconductor
#options(repos = c(getOption("repos"), BiocManager::repositories()))
knitr::opts_chunk$set(echo = T, collapse = T, cache.lazy = F,autodep = T, warning = F)
# HAVE TO INSTALL IN LINUX: Curl and Cairo library
suppressPackageStartupMessages({
  library(here)
  source("https://raw.githubusercontent.com/benjamin-elusers/yeastomics/main/src/__setup_yeastomics__.r")
  library(xfun)
  dep.pkg = c("corrplot", "ggtree", "gtools", "pbapply", "gridExtra", "GGally",
    "dplyr", "performance", "ggplot2",  "ggfortify", "tidyverse", "gplots",
    "data.table", "ggpubr", "ggcorrplot", "plotly", "ggsignif", "ape","kableExtra",
    "ggcorrplot","formattable","DT","sessioninfo")
  xfun::pkg_attach2(dep.pkg)
  source(here("src","functions_transcriptomics.R"))
  source(here("src",'function_proteomics.r'))
})
# turn off annoying messages from dplyr::summarise
options(dplyr.summarise.inform = FALSE)
graphics.off()

# Yeast data
sc_annofile = here('data','yeast-annotations.rds')
sc_annotation = preload(sc_annofile, load.annotation(),doing='loading annotations data for yeast...')
sc_annotation_orf = dplyr::select(sc_annotation,-c(SGD,GENENAME,ROLE,LOC,COMPLEX,node,nprot,nsp,taxon))
sc_identifiers = sc_annotation %>% dplyr::select(SGD,ORF,UNIPROT,GENENAME)

riboseq_strains = c('AMH','BAN','BED','BPL','BTT','CMP','CPI','CQC') # Strains with riboseq data (on 14/01/21)
strains.info = load.peter2018.data(1) %>%  # strains info from supp mat of Science paper
                 mutate( has_riboseq = standardized_name %in% riboseq_strains)

yk11_all_snp = left_join(readRDS(here('data','YK11-SNP_NT.rds')),
                         readRDS(here('data','YK11-SNP_AA.rds')), 
                         by=c('id', "aa_pos"='ref_pos', 'alt_codon_aa' = 'alt_aa'), 
                         suffix = c("_nt", "_aa") ) %>%
    left_join(sc_identifiers,by=c('id'='ORF'))


y8_all_snp = left_join(readRDS(here('data','Y8-SNP_NT.rds')),
                       readRDS(here('data','Y8-SNP_AA.rds')), 
                       by=c('id', "aa_pos"='ref_pos', 'alt_codon_aa' = 'alt_aa'),
                       suffix = c("_nt", "_aa")) %>% 
  left_join(sc_identifiers,by=c('id'='ORF'))

# Conservation/evolutionary rate
evo_fungi = read_delim(here('output','evolution-fungi-protein.tsv'),delim='\t') 
evo_snp = read_delim(here('output','evolution-snp-protein.tsv'),delim='\t') 
fungi_rate = evo_fungi %>% dplyr::select(r4s:leisr_local) %>% as.matrix
strains_rate = evo_snp %>% dplyr::select(r4s:leisr_local) %>% as.matrix
er_fungi_cor = cor(fungi_rate,use='pairwise.complete',met='spearman')
er_strains_cor = cor(strains_rate,use='pairwise.complete',met='spearman')

p_fungi  =ggcorrplot(er_fungi_cor,type='upper',method='circle',lab = T,lab_size = 3, title='fungi evo. rate',ggtheme = theme_classic())
p_snp = ggcorrplot(er_strains_cor,type='upper',method='circle',lab = T,lab_size = 3, title='strains evo. rate',ggtheme = theme_classic())
ggsave(p_fungi, path = here('plot'),filename='cor-evolution-fungi.png',scale=1.2)
ggsave(p_snp, path = here('plot'),filename='cor-evolution-snp.png',scale=1.2)
er_fungi_worst   = colnames(er_fungi_cor)[ abs(er_fungi_cor[1,]) < 0.7 ]
er_strains_worst = colnames(er_strains_cor)[ abs(er_strains_cor[1,]) < 0.7 ]

# Keep the best evolutionary rates (correlates with r4s > 0.7)
evo_yeast = left_join(evo_snp,evo_fungi, by=c('id','len_ref'),suffix=c('.yk11','.fungi')) %>% 
            mutate(HAS_ORTHOLOG = !is.na(len_msa.fungi) ) %>% 
    left_join(sc_identifiers,by=c('id'='ORF')) %>% 
    dplyr::mutate( f_snp = n_mismatched/len_msa.yk11, pid.fungi=1-f_mismatched) %>%
    dplyr::rename(orf=id,n_snp = n_mismatched) %>%
    dplyr::select(-f_mismatched) %>%
    relocate(orf,UNIPROT,GENENAME,SGD,HAS_ORTHOLOG, len_ref,
             len_msa.yk11, n_snp,f_snp, len_msa.fungi,pid.fungi) %>% 
    dplyr::select(-paste0(er_fungi_worst,'.fungi'),-paste0(er_strains_worst,'.yk11'))

# test = evo_yeast%>% dplyr::select(n_snp:leisr_local.fungi) %>% as.matrix()
# test_cor = cor(test, use='pairwise.complete',method='spearman')
# ggcorrplot(test_cor,type='upper',method='circle',lab = T,lab_size = 3, title='')
save.image(here::here('output',sprintf("%02d-yeast-data.rdata",chap_cur)))
# example R options set globally
options(width = 60)

# example chunk options set globally
knitr::opts_chunk$set(
  comment = "#>",
  collapse = TRUE,
  out.width="100%"
)
chap_cur=01
chap_num = sprintf("%02d-",chap_cur)
load(here::here('output',sprintf("%02d-yeast-data.rdata",chap_cur-1)))
## Our dataset
isolates = c('CPI','CMP','AMH','CQC','BPL','BTT','BED','BAN')
RNA_seq_data = readRDS(here("data",'RNA_seq.RDS'))
Ribo_seq_data = readRDS(here("data",'Ribo_seq.RDS'))
n = nrow(RNA_seq_data)
strains = fread(here("data",'strains.csv'),data.table = F)
strains = strains[strains$`Standardized name`%in%isolates,c(1,2,3,4,9,10,11,16)]
library(DT)
datatable(strains, rownames = FALSE, caption = NULL,
               filter = "top", escape = FALSE, style = "default",
               width = NULL, height = NULL)

p1= ggcorr(RNA_seq_data ,method = c("everything", "spearman"), label = T, label_round = 2, midpoint = 0.75, limits = c(0.6,1), size = 2)+
  ggtitle('RNA-seq correlation matrix')
p2=ggcorr(Ribo_seq_data ,method = c("everything", "spearman"), label = T, label_round = 2, midpoint = 0.75, limits = c(0.6,1), size = 2)+
  ggtitle('Ribo-seq correlation matrix')

grid.arrange(p1,p2, ncol=2)

proteomic_WIS2 = fread(here::here('output','median-normalized.txt'), data.table = F)
n = nrow(proteomic_WIS2)
a = fread(here::here('output','proteomics-normalized-log10_intensities.tsv'))
rownames(proteomic_WIS2)= a$UNIPROT

prot_gene_name = fread(here::here('output','test.csv'), fill = T, data.table = F) %>% 
                  mutate(Chromosome = recode(Chromosome,'(3)'=V8) ) %>% 
                  dplyr::select(-V8) %>%
                  dplyr::filter(!duplicated(prot_names))
                  

# Calculate mean of normalized intensity per strain
int_strains = pivot_longer(proteomic_WIS2 %>% rownames_to_column('uniprot'), 
             -uniprot, values_to='int2use',
                       names_to = c('strain','bio','tech','day'),
                       names_pattern = "([^_]+)_([^_]+)_([^_]+)_([^_]+)") %>% 
      group_by(uniprot,strain=toupper(strain)) %>% summarize( mean_int = mean_(int2use)) %>%
      pivot_wider(id_cols=uniprot, names_from = strain, names_glue = "{strain}", values_from = mean_int )

proteomic_WIS_mean_filtered = data.frame(int_strains) %>% 
                      drop_na %>% 
                      dplyr::filter(uniprot %in% prot_gene_name$prot_names) %>% 
                      left_join(prot_gene_name[,c('prot_names','ID')], by=c('uniprot'='prot_names'))

all_exp = proteomic_WIS_mean_filtered %>% 
  inner_join(RNA_seq_data %>% rownames_to_column('ID'), by ='ID', suffix=c('_Prot','')) %>% 
  inner_join(Ribo_seq_data %>% rownames_to_column('ID'), by ='ID', suffix=c('_RNA','_Ribo'))


log2_all_exp= all_exp %>% column_to_rownames('ID') %>%
              # transform to log2 to RNA and Ribo (already done for normalized proteomics)
              mutate( across( ends_with(c('_RNA','_Ribo')), .fns = log2) ) %>%
              select(where(is.numeric))
boxplot(log2_all_exp,las=2,ylab='Gene expression (log2)')
df_rank <- apply(log2_all_exp,2,rank,ties.method="min") 
df_sorted <- data.frame(apply(log2_all_exp, 2, sort))
df_mean <- apply(df_sorted, 1, mean)
index_to_mean <- function(my_index, my_mean){
  return(my_mean[my_index])
}

log2_all_exp_norm <- apply(df_rank, 2, index_to_mean, my_mean=df_mean) %>% as_tibble
rownames(log2_all_exp_norm) = rownames(log2_all_exp)
boxplot(log2_all_exp_norm,las=2, ylab='Normalized gene expression (log2)', title='Quantile-normalized gene expression across RNA/Ribo/Proteomics')
library(corrr)
cor_prot= select(log2_all_exp_norm, ends_with('_Prot')) %>%  correlate(method = 'sp') %>% column_to_rownames('term')
cor_rna= select(log2_all_exp_norm, ends_with('_RNA')) %>%  correlate(method = 'sp') %>% column_to_rownames('term')
cor_ribo= select(log2_all_exp_norm, ends_with('_Ribo')) %>%  correlate(method = 'sp') %>% column_to_rownames('term')

cor_exp= tibble(RNA = cor_rna[lower.tri(cor_rna)],
                Ribo = cor_ribo[lower.tri(cor_ribo)],
                Prot = cor_prot[lower.tri(cor_prot)])
df_cor_exp = pivot_longer(cor_exp, everything()) %>% 
              arrange(name) %>% mutate(experiment = factor(name))
pair_exp = unique(df_cor_exp$experiment) %>% as.character() %>% combn(m = 2) %>% as_tibble()

ggplot(df_cor_exp,aes(x=experiment, y=value,fill=experiment))+
  geom_boxplot()+
  theme_classic()+
  xlab('')+
  ylab('Rho')+
  stat_compare_means(comparisons =pair_exp)
#remotes::install_github("TimTeaFan/dplyover")
library(dplyover)
# calculate fold change pairwise for each experiment
fc_prot = select(log2_all_exp_norm,ends_with('_Prot')) %>% 
  rename_with(.fn=str_remove_all,pattern = "_Prot") %>%
  transmute(across2x(everything(), everything(),.fns = ~foldchange(.x,.y),.comb = 'minimal'),
            experiment='Prot')%>% 
  pivot_longer(-experiment,names_to='pair',values_to = 'fc')
fc_rna = select(log2_all_exp_norm,ends_with('_RNA')) %>% 
  rename_with(.fn=str_remove_all,pattern = "_RNA") %>%
  transmute(across2x(everything(), everything(),.fns = ~foldchange(.x,.y),.comb = 'minimal'),
            experiment='RNA')%>% 
  pivot_longer(-experiment,names_to='pair',values_to = 'fc')
fc_ribo = select(log2_all_exp_norm,ends_with('_Ribo')) %>% 
  rename_with(.fn=str_remove_all,pattern = "_Ribo") %>%
  transmute(across2x(everything(), everything(),.fns = ~foldchange(.x,.y),.comb = 'minimal'),
            experiment='Ribo') %>% 
  pivot_longer(-experiment,names_to='pair',values_to = 'fc')

# combine all pairwise foldchange
fc_exp = bind_rows(fc_prot,fc_rna,fc_ribo) %>% arrange(experiment,pair)

pair_exp=unique(fc_exp$experiment) %>% as.character() %>% combn(m = 2) %>% as_tibble()

ggplot(fc_exp,aes(experiment, log2(fc), fill=experiment))+
  geom_boxplot()+
  scale_y_log10()+
  stat_compare_means(comparisons = pair_exp)+
  theme_classic()+
  xlab('')+
  ylab('|log2(FC)|')

# dist_exp = log2_all_exp_norm %>% add_column(id=all_exp$ID) %>%
#   pivot_longer(cols = -id,
#                names_to = c('strain','experiment'), 
#                names_pattern = '(.+)_(.+)', 
#                values_to = 'exp') %>% 
#   pivot_wider(id_cols = c('id','experiment'),names_from='strain', values_from = 'exp') %>%
#   group_by(experiment) %>% 
#   mutate( across2x(AMH:CQC, AMH:CQC, .fns =dist, method= 'euclidean', .comb = 'minimal'))     
#            

b=lapply(c('RNA','Ribo','Prot'), function(i){
  i<<-i
  a = log2_all_exp_norm[,grep(i, colnames(log2_all_exp_norm))]
  a = dist(t(a))
  a = as.matrix(a)
  a= a[lower.tri(a)]
  return(a)
})
names(b)=  c('RNA','Ribo','Prot')
b=as.data.frame(b)
b = melt(b)

pair_exp=unique(b$variable) %>% as.character() %>% combn(m = 2) %>% as_tibble()

ggplot(b,aes(x=variable,y=value, fill=variable))+
  geom_boxplot()+
  theme_classic()+
  ylab('Euclidean distance')+
  xlab('')+
  stat_compare_means(comparisons = pair_exp)


a=lapply(c('RNA','Ribo','Prot'), function(i){
  i<<-i
  a = log2_all_exp_norm[,grep(i, colnames(log2_all_exp_norm))]
  a=apply(a,1 ,var)
  return(a)
})
names(a)= c('RNA','Ribo','Prot') 
a =as.data.frame(a)
b=a
b = melt(b)

pair_exp=unique(b$variable) %>% as.character() %>% combn(m = 2) %>% as_tibble()

ggplot(b,aes(x=variable,y=value, fill=variable))+
  geom_boxplot()+
  theme_classic()+
  ylab('Variance')+
  xlab('')+
  stat_compare_means(comparisons = pair_exp)+
  scale_y_log10()

save.image(here::here('output',paste0(chap_num,"transcriptomics.rdata")))
# example R options set globally
options(width = 60)

# example chunk options set globally
knitr::opts_chunk$set(
  comment = "#>",
  collapse = TRUE,
  out.width="100%"
)
chap_cur=02
chap_num = sprintf("%02d-",chap_cur)
load(here::here('output',sprintf("%02d-yeast-data.rdata",chap_cur-2)))
knitr::include_graphics("images/phylogenetic-tree-8-strains.png")
# Maxquant files
MAXQUANT.files = list(
  evidence = here::here('data','Raw_files','combined/txt','evidence.txt'),
  annotation = here::here('results','keys.txt'),
  proteinGroups = here::here('data','Raw_files','combined/txt','proteinGroups.txt')
)
# Reading maxquant protein data
ms0=read_maxquant(MAXQUANT.files$proteinGroups, zero.to.na = T, int_type = 'LFQ', pep_type = 'Unique peptides')

keys_cols = c('majority_protein_i_ds','gene_names')

# get sample_names
samples = str_subset(colnames(ms0),'lfq_intensity') %>% str_replace('lfq_intensity_',"")
nsamples=n_distinct(samples)

# define groups based on sample names
df.group = tibble(sample=toupper(samples)) %>%
            separate(col=sample, into= c('strain','biorep','techrep','dayrun'), sep = '_', remove = F) %>%
            mutate( biorep = paste0("R",biorep), techrep = paste0("r",techrep),dayrun=paste0(dayrun,"_04_22"))

all_strains = unique(df.group$strain)
nstrains = n_distinct(all_strains)
nreplicates = df.group %>% count(strain) %>% pull(n) %>% unique

# associate a palette of colors for each group
col.group = list(
  # spectral palette
  # strain = c('AMH'="#D53E4F", 'BAN'="#F46D43", 'BED'="#FDAE61", 'BPL'="#FEE08B",
              # 'BTT'="#E6F598", 'CMP'="#ABDDA4", 'CPI'="#66C2A5", 'CQC'="#3288BD"),
  # Set1 palette
  strain = c('AMH'="#E41A1C", 'BAN'="#377EB8", 'BED'="#4DAF4A", 'BPL'="#984EA3",
             'BTT'="#FF7F00", 'CMP'="#FFFF33", 'CPI'="#A65628", 'CQC'="#F781BF"),
  biorep = c('R1'="#002BDC",'R2'="#00A6E7"),
  techrep = c('r1'="#1C7947",'r2'="#39A388"),
  dayrun = c('10_04_22'='white','12_04_22'='black') 
  )


TAB_SAMPLES= kbl(samples,col.names = 'Sample Names:',row.names =T, centering = F) %>% 
              kable_paper("striped", full_width = F) %>% 
              kable_styling(position='left')  

#write_rds(ms0,here('output','01-expression.rds'))
#write_rds(df.group,here('output','01-samples-group.rds'))
#write_rds(col.group,here('output','01-samples-colors.rds'))
# Total number of hits
NHITS = n_distinct(ms0$protein_i_ds)
# Contaminants
is_contaminant = str_detect(ms0$protein_i_ds,"CON__")
NCON = n_distinct(ms0$protein_i_ds[is_contaminant])
# Reversed sequences (REV reversed sequences used by MaxQuant to estimate the FDR)
is_reversed = str_detect(ms0$protein_i_ds,"REV__")
NREV = n_distinct(ms0$protein_i_ds[is_reversed])
# Proteins
is_protein_group = !is_contaminant & !is_reversed
NPROT = n_distinct(ms0$protein_i_ds[is_protein_group])

# Multiple proteins matched
NSINGLE = sum(ms0$number_of_proteins==1 & is_protein_group)
NMULTI = sum(ms0$number_of_proteins > 1 & is_protein_group)
NDUP = sum(ms0$number_of_proteins==2 & is_protein_group)
save.image(here('output',paste0(chap_num,"proteomics.rdata")))
# example R options set globally
options(width = 60)

# example chunk options set globally
knitr::opts_chunk$set(
  comment = "#>",
  collapse = TRUE,
  out.width="100%"
)
chap_cur=03
load(here('output',sprintf('%02d-proteomics.rdata',chap_cur-1)))
# Filter hits
ms1=filter_hits(ms0)

int_raw=read_maxquant(MAXQUANT.files$proteinGroups, zero.to.na = T, int_type = 'Intensity', pep_type = 'Unique peptides') %>% 
  filter_hits(verbose = F) %>% 
  dplyr::select(uniprot=majority_protein_i_ds,starts_with("intensity_")) %>% 
            #mutate(across(where(is.integer64), ~as.integer(.))) %>% # make sure to use numeric and not integer
            as.data.frame() %>% column_to_rownames('uniprot') %>%
            rename_with(everything(),.fn=gsub, pattern='intensity_', replacement='') %>%
            rename_with(.fn = str_to_upper)

# Process intensities
is.integer64 <- function(x) inherits(x, "integer64")

int_lfq = ms1 %>% dplyr::select(uniprot=majority_protein_i_ds,starts_with("lfq")) %>% 
            #mutate(across(where(is.integer64), ~as.integer(.))) %>% # make sure to use numeric and not integer
            as.data.frame() %>% column_to_rownames('uniprot') %>%
            rename_with(everything(),.fn=gsub, pattern='lfq_intensity_', replacement='') %>%
            rename_with(.fn = str_to_upper)
            

int_md_norm = center_intensities(int_lfq, center='median', tolog2=T) %>% 
          as.data.frame() %>%
          rename_with(everything(),.fn =gsub, pattern='lfq_intensity_', replacement='') %>% 
          rename_with(.fn = str_to_upper)
         
# TRYING DIFFERENT NORMALIZATIONS SCHEME (NOT READY)
INT_NORM = normalize_intensities(int = int_raw, design = df.group)
TAB_NORM = kbl(names(INT_NORM@normalizations),row.names = T,col.names = 'Normalizations:',position = 'left') %>% 
            kable_paper("striped", full_width = F) %>% 
            kable_styling(position='left')  

            
int_norm = int_md_norm %>% rownames_to_column('uniprot') 
int_norm_ids = int_norm %>% dplyr::left_join(sc_identifiers,by=c('uniprot'='UNIPROT')) %>% filter(!duplicated(uniprot))
#compare_exp(log2(int_raw),int_loess_norm, all=T)

long_int_norm = pivot_longer(int_norm  , cols=-uniprot, values_to='int2use',
                             names_to = c('strain','bio','tech','day'),
                             names_pattern = "([^_]+)_([^_]+)_([^_]+)_([^_]+)") %>%
                group_by(strain,uniprot) %>% mutate(na_rep = sum.na(int2use))

# Intensities across strains  (default is average)
int_by_strain = pivot_wider(long_int_norm ,
              id_cols=uniprot,
              names_from = 'strain',
              names_glue = "{strain}",
              values_from = "int2use",
              values_fn=mean_
              )

na_by_strain = pivot_wider(long_int_norm,
              id_cols=uniprot,
              names_from = c('strain'),
              names_glue = "na_rep_{strain}",
              values_from = "int2use",
              values_fn=sum.na
              )

df_strains= left_join(int_by_strain,na_by_strain) %>% 
  rowwise %>%
  mutate( na_strains = sum.na(c_across(cols = starts_with('lfq_int'))) )

int_all = int_norm  %>% column_to_rownames('uniprot') %>% as.data.frame()

# Removing hits with missing values for more than one strain (using average intensities over replicates)
ms2= df_strains %>% filter(na_strains < 1)
int_filt_strains = ms2 %>% dplyr::select(-starts_with('na')) %>% column_to_rownames('uniprot') %>% as.data.frame()

# Save processed & normalized intensities data
#write_rds(df_strains,here::here('output',sprintf("%02d-normalized-intensities.rds",chap_cur)))
library(MsCoreUtils)
int_norm_nona = int_norm %>% drop_na()
int_norm_bpca = impute_bpca(int_norm) %>% as_tibble() %>% add_column(uniprot = int_norm_ids$uniprot)
#colSums(is.na(int_norm_nona))
#draw_scatterplots(int_norm_nona)
save.image(here('output',sprintf("%02d-processed-data.rdata",chap_cur)))
# example R options set globally
options(width = 60)

# example chunk options set globally
knitr::opts_chunk$set(
  comment = "#>",
  collapse = TRUE,
  out.width="100%"
)
chap_cur=04
#load(here('output',sprintf("%02d-processed-data.rdata",chap_cur-1)))
# get lfq-peptide intensities (lfq=label-free quantitation) 
intensities = ms1 %>% dplyr::select(uniprot=majority_protein_i_ds,starts_with("lfq")) 
# Convert intensities to long format 
long_int_all = get_long_intensities(intensities) %>% mutate(int2use = log10_int)
tot_int = pivot_longer(intensities,   -uniprot,
                       names_to = c('sample','strain','bio','tech','day'),
                       names_pattern = "(([^_]+)_([^_]+)_([^_]+)_([^_]+))",
                       names_prefix = 'lfq_intensity_',
                       values_to='int') %>% 
  group_by(sample) %>% 
  summarize(total_intensity=sum_(as.numeric(int))) %>% 
  dplyr::left_join(df.group %>% mutate(sample=tolower(sample)))

  
bp_totint= ggplot( tot_int, aes(x=sample,y=total_intensity,fill=strain,label=sample)) + 
  geom_col() + 
  geom_text(angle=90,check_overlap = T,hjust=-0.1,y=0) + 
  theme(axis.text.x = element_blank(),axis.ticks = element_blank())
plot(bp_totint)

# Get intensities for ubiquitously detected hits between strains
long_intensities = long_int_all %>% 
  filter(ratio_na_rep<1) %>% # At least one peptide in one replicate from a each strain
  group_by(strain) %>% mutate(nprot = n_distinct(uniprot)) %>% 
  hablar::convert(n_na_rep=int(n_na_rep)) %>% 
  arrange(n_na_rep)

# Get median expression and # proteins per strain as a function of NAs in replicates
stats_per_strain=long_intensities %>% 
  group_by(strain=toupper(strain),n_na_rep=factor(n_na_rep)) %>% 
  summarize(nprot=n_distinct(uniprot),  MAX=max(int2use), MED=median_(int2use)) %>% 
  mutate( YMAX = MAX - 0.25*as.numeric(n_na_rep))

# Compare intensities of ubiquitous hits between strains
bp=ggplot(data=long_intensities,mapping=aes(y=int2use,x=toupper(strain))) +
  ggbeeswarm::geom_quasirandom(mapping = aes(group=n_na_rep,color=as.factor(nreplicates-n_na_rep)), na.rm=TRUE) +
  geom_violin(alpha=0.2, na.rm=TRUE,draw_quantiles = c(0.25,0.5,0.75)) + 
  geom_text(data=stats_per_strain,aes(label=nprot,color=nreplicates-n_na_rep,x=strain,y=YMAX),show.legend = F) +
  ylim(5,max_(stats_per_strain$MAX)) +
  ylab('Peptides intensities (log10)') + labs(x='Strains', colour='expressed in # replicates') +
  theme_pubclean() + grids(axis = 'y') + theme(axis.text = element_text(size=12)) +
  scale_color_canva(palette = "Pool party",limits=rev)
plot(bp)

BY_STRAINS = group_by(long_intensities,strain=toupper(strain)) %>% 
             summarize(median_exp=median_(int2use)) %>%
             data.table::transpose(make.name = "strain", keep.names = "strain name") 

BY_REP = group_by(long_intensities, n_replicates=as.integer(4-n_na_rep)) %>% 
  summarize(median_exp=median_(int2use)) %>% 
  data.table::transpose(make.name = 'n_replicates',keep.names = '# replicates')

TAB_STRAINS_EXP = kbl( BY_STRAINS ,digits = 2) %>%
  kable_paper("striped", full_width = F) %>% kable_styling()

TAB_REP_EXP = kbl( BY_REP, digits=2 ) %>%
  kable_paper("striped", full_width = F) %>% kable_styling()  

count_NA_samples= pivot_longer(intensities,   -uniprot,
                           names_to = c('sample','strain','bio','tech','day'),
                           names_pattern = "(([^_]+)_([^_]+)_([^_]+)_([^_]+))",
                           names_prefix = 'lfq_intensity_',
                           values_to='int') %>% 
  group_by(sample) %>% 
  summarize(n_na=sum(is.na(int))) %>% 
  dplyr::left_join(df.group %>% mutate(sample=tolower(sample))) %>% 
  mutate(is_outlier = strain %in% c("CQC","CMP") & biorep=="R1")

mean_na_outliers = mean_(count_NA_samples %>% dplyr::filter(is_outlier) %>% pull(n_na)) %>% round()
mean_na = mean_(count_NA_samples %>% dplyr::filter(!is_outlier) %>% pull(n_na)) %>% round()

bp_na = ggplot(count_NA_samples,aes(x=sample,label=sample)) + 
        geom_col(aes(y=n_na,fill=strain,col=is_outlier)) + 
        geom_text(data=subset(count_NA_samples,!is_outlier),aes(y=0),angle=90,hjust=-0.1)+
        geom_text(data=subset(count_NA_samples,is_outlier),aes(y=0),angle=90,hjust=-0.1,col='red')+
        ylab('# NAs') +
        theme(axis.text.x = element_blank(),axis.ticks = element_blank()) +
        geom_hline(yintercept = mean_na_outliers,col='red',linetype=2) + 
        geom_hline(yintercept = mean_na) + scale_color_manual(values = c('TRUE'='red'))

  
plot(bp_na)
pep_missing = long_int_all %>%
  filter(ratio_na_rep==1) %>% 
  dplyr::select(-c(bio,tech)) %>% 
  distinct()

hit_missing = pep_missing$uniprot

bp_miss= long_int_all %>% arrange(n_na_strains) %>% 
         dplyr::filter(has_missing_strains) %>%
  ggplot(mapping=aes(y=int2use,x=8-n_na_strains)) +
  geom_violin(mapping=aes(fill=factor(n_na_strains)),
              alpha=0.2, na.rm=TRUE,draw_quantiles = c(0.25,0.5,0.75),color='black',show.legend = F) +
  geom_text(aes(label=nprot_miss),y=12,check_overlap = T,col='red') + ylim(5,12) +
  ylab('Peptides intensities (log10)') + labs(x='expressed across # strains') +
  scale_x_continuous(breaks=0:8) +
  theme_pubclean() + grids(axis = 'y') + theme(axis.text = element_text(size=12))
  
plot(bp_miss)

stat_per_miss = long_int_all %>%
  dplyr::select(n_na_strains,nprot,int2use) %>%
  mutate(n_strains= nstrains-n_na_strains) %>%
  group_by(n_strains) %>% mutate(md_exp = median_(int2use)) %>%
  ungroup() %>% dplyr::select(-int2use) %>%
  distinct() %>% 
  arrange(n_strains) %>% 
  mutate(
          f_exp = 100*nprot/sum(nprot),
          pc_exp = sprintf("%.1f%%",f_exp),
          pc_cum = sprintf("%.1f%%",cumsum(f_exp))
          ) %>%
  arrange(desc(n_strains)) %>%
  mutate(pc_cum_desc = sprintf("%.1f%%",cumsum(f_exp))) %>%
  dplyr::select(nprot,n_strains,md_exp,pc_exp,pc_cum,pc_cum_desc)


TAB_EXP_STRAIN = kbl(stat_per_miss,digits = 2, align = 'l',
                     col.names=c('# proteins','# expressing strains','median exp. (log10)','% quantified','cum. %','cum. % (decreasing)')) %>%
  kable_paper("striped", full_width = F) %>% kable_styling()

# Count hits with NA in samples/groups
na_int= intensities %>% 
        group_by(uniprot) %>%
        summarize(across(all_of(paste0("lfq_intensity_",samples)), is.na ) )
colnames(na_int) = c('uniprot',samples)

ComplexUpset::upset(data=as.data.frame(1-na_int[,-1]),intersect=samples,
      name='intensity quantified', min_degree=5, sort_sets=F, 
      width_ratio=0.1,min_size=10, keep_empty_groups=F, wrap=TRUE,
         base_annotations=list(
          'Number of hits'=ComplexUpset::intersection_size(text_colors=c(on_background='red', on_bar='yellow'),text=list(angle=0,hjust=0.45,size=2.8))
           + annotate( geom='text', x=Inf, y=Inf, label=paste('Total hits:', nrow(na_int)), vjust=1, hjust=1 )
         ),
)


CV_raw = calculate_cv(long_int_all,by_bio = T)
box_cv_raw = draw_boxcv(CV_raw,by_bio = T)
CV_norm = calculate_cv(long_int_norm,by_bio = T)
box_cv_norm = draw_boxcv(CV_norm,by_bio = T)

plot(box_cv_raw / box_cv_norm)

show_table_cv(CV_raw,by_bio = F)
show_table_cv(CV_raw,by_bio = T)

show_table_cv(CV_norm,by_bio = F)
show_table_cv(CV_norm,by_bio = T)
draw_normalization_density(int_raw,int_lfq,df.group)
# scatterplots between all samples
scmat_all=draw_scatterplots(datain=int_all)
print(scmat_all)

# heatmap correlation
cs_all=compute_samples_correlation(int_all)
COR_RANGE = range( cs_all[row(cs_all) == (col(cs_all) - 1)] )

by_sample = df.group %>% column_to_rownames("sample")
hm_all=draw_heatmap_samples(mcor = cs_all,df.group=by_sample,col.group = col.group)
int_all_scaled = scale(int_all,center=T, scale = T)
make_pca(na.omit(int_all_scaled), with_labels=T,col_by_group=1:4)
save.image(here('output',sprintf("%02d-quality-control.rdata",chap_cur)))
# example R options set globally
options(width = 60)

# example chunk options set globally
knitr::opts_chunk$set(
  comment = "#>",
  collapse = TRUE,
  out.width="100%"
)
chap_cur=05
#load(here('output',sprintf("%02d-quality-control.rdata",chap_cur-1)))
# scatterplots between strains
scmat_strains=draw_scatterplots(datain=int_filt_strains)
print(scmat_strains)
# heatmap correlation
cs_strains=compute_samples_correlation(int_filt_strains)
COR_RANGE = range( cs_strains[row(cs_strains) == (col(cs_strains) - 1)] )

hm_strains=draw_heatmap_samples(mcor = cs_strains,df.group=c(),col.group = col.group)
int_scaled_strains = scale(int_filt_strains,center=T, scale = T)
make_pca(na.omit(int_scaled_strains), with_labels=F,col_by_group=1:2)
save.image(here('output',sprintf("%02d-strain-comparison.rdata",chap_cur)))
# example R options set globally
options(width = 60)

# example chunk options set globally
knitr::opts_chunk$set(
  comment = "#>",
  collapse = TRUE,
  out.width="100%"
)
chap_cur=06
#load(here::here('output',sprintf("%02d-strain-comparison.rdata",chap_cur-1)))
#ind_na_rows  = find_na_rows(int_norm,as.indices = T)
df_imputed = tibble( uniprot = rownames(int_norm), is_imputed = rowSums( is.na(int_norm))>0)
#int_norm_bpca$imputed = rowSums( is.na(int_norm))>0
volcPlot(INPUT=int_norm_bpca, IMPUTED=df_imputed, MIN_LFC=2, MIN_PVAL=0.01, WHICH='both', TOPN = 20)

# Without NA
volcano_data =  get_volcano_data(input_data=int_norm_nona, which='both',
                            min_lfc=2, min_pval=0.01, topn = 20)
df_limma = bind_rows(volcano_data) %>% as_tibble()
dfe_nona = subset(df_limma,sig!='Non significant')
N_DFE_NONA = nrow(dfe_nona)
NPROT_DFE_NONA =  n_distinct(dfe_nona$ID)

# With imputed expression to replace NA
dfe =  get_volcano_data(input_data=int_norm_bpca, which='both',
                            min_lfc=2, min_pval=0.01, topn = 20) %>% 
                bind_rows %>% as_tibble() %>% filter(sig!='Non significant')

N_DFE_IMPUTE = nrow(dfe)
NPROT_DFE_IMPUTE =  n_distinct(dfe$ID)

down = dfe %>% group_by(ID) %>% dplyr::filter(sig=='Downregulated') %>%
       summarize( strains_down = paste0(comparison,collapse=' '),
                  down_AMH = str_count(strains_down,'AMH-'),
                  down_BAN = str_count(strains_down,'BAN-'),
                  down_BED = str_count(strains_down,'BED-'),
                  down_BPL = str_count(strains_down,'BPL-'),
                  down_BTT = str_count(strains_down,'BTT-'),
                  down_CMP = str_count(strains_down,'CMP-'),
                  down_CPI = str_count(strains_down,'CPI-'),
                  down_CQC = str_count(strains_down,'CQC-'))
up = dfe %>% group_by(ID) %>% dplyr::filter(sig=='Upregulated') %>%  
      summarize( strains_up = paste0(comparison,collapse=' '),
                  up_AMH = str_count(strains_up,'AMH-'),
                  up_BAN = str_count(strains_up,'BAN-'),
                  up_BED = str_count(strains_up,'BED-'),
                  up_BPL = str_count(strains_up,'BPL-'),
                  up_BTT = str_count(strains_up,'BTT-'),
                  up_CMP = str_count(strains_up,'CMP-'),
                  up_CPI = str_count(strains_up,'CPI-'),
                  up_CQC = str_count(strains_up,'CQC-'))
# get_dfe(int_norm, MIN_LFC=2, MIN_PVAL=0.01,  WHICH='both', TOPN = 20) %>% remove_rownames() %>% 
#   dplyr::left_join(sc_identifiers, by=c('ID'='UNIPROT'))

# Number of times a hit is differentially expressed
df_dfe = dfe %>% left_join(janitor::tabyl(dfe,ID,sig)) %>%
         left_join(down) %>% left_join(up) %>%
         rename(uniprot=ID) %>% 
         group_by(uniprot,comparison) %>% 
        mutate( n_strains_up = sum(c_across(starts_with('up_')) !=0 ),
                n_strains_down = sum(c_across(starts_with('down_'))!=0)) %>%
        replace_na(list(n_strains_up=0,n_strains_down=0)) %>%
        left_join(evo_yeast, by=c('uniprot'='UNIPROT')) 
  

df_dfe_annot = df_dfe %>%
          left_join(sc_annotation_orf,by=c('uniprot'='UNIPROT')) %>%
  mutate(uniprot_link = paste0("<a href='https://www.uniprot.org/uniprot/",uniprot,"'>",uniprot,"</a>"),
         sgd_link = paste0("<a href='https://www.yeastgenome.org/locus/",SGD,"'>",SGD,"</a>"),
         regulated = Downregulated+Upregulated) %>% 
  dplyr::relocate(uniprot,uniprot_link,sgd_link,regulated,Downregulated,Upregulated, 
                  GENENAME,ORF,PNAME,'FUNCTION','BIOPROCESS_all','ORTHO','OTHER')
library(kableExtra)
library(formattable)
library(DT)

ft_dt = df_dfe_annot %>% 
  formattable(
    list(
      `Downregulated` = color_tile("white", "red"),
      `Upregulated` = color_tile("white", "blue"),
      `regulated` = color_tile("white", "gray")
    )
) %>% as.datatable(
        options = list(
            fixedHeader=T,
            paging = TRUE, pageLength = 20,  ## paginate the output and #rows for each page
            scrollY = TRUE,   ## enable scrolling on X/Y axis
            #autoWidth = TRUE, ## use smart column width handling
            server = FALSE,   ## use client-side processing
            dom = 'Bfrtip', buttons = list('csv', 'excel', list(extend = 'colvis')),
            fixedColumns = list(leftColumns = 1),
            columnDefs = list(list(width = '50px', visible=TRUE, targets = "_all"))
          ),
  extensions = c('FixedHeader','FixedColumns','Buttons'),
  selection = 'single',           ## enable selection of a single row
  filter = 'bottom',              ## include column filters at the bottom
  rownames = FALSE,               ## don't show row numbers/names
  width = NULL, 
  height = NULL,
  caption = NULL
) %>% 
   formatStyle(columns = 1:30, target= 'row',lineHeight='100%', `font-size` = '12px')

ft_dt

library(treemap)
library(d3Tree)
treemap(df_dfe_annot, index=c("BIOPROCESS_all", "comparison"), vSize='regulated', vColor="EffectSize", type="value") 
treemap(df_dfe_annot, index=c("BIOPROCESS_all", "GENENAME"), vSize="regulated", vColor="EffectSize", type="value",)
dat_scaled = int_scaled_strains %>% as.data.frame() %>% rownames_to_column('uniprot')

# Transpose the matrix to calculate distance between experiments, row-wise
d_pair <- dat_scaled[,-1] %>% t() %>%
  dist(.,method = "euclidean", diag = FALSE, upper = FALSE)
# Calculate the distance between proteins row-wise 
d_prot <- dat_scaled %>% dplyr::filter( uniprot %in% dfe$ID) %>% dplyr::select(-uniprot) %>% dist(.,method = "euclidean", diag = FALSE, upper = FALSE)

dfe_lfc = bind_rows(volcano_data) %>% 
          pivot_wider(id_cols=ID, names_from = 'comparison', values_from = 'EffectSize') %>% 
          dplyr::filter(ID %in% dfe$ID) %>% left_join(sc_identifiers,by=c('ID'='UNIPROT')) %>%
          column_to_rownames('GENENAME') %>% dplyr::select(-ORF,-ID,-SGD)

# Heatmap of differentially expressed genes
p_dfe= pheatmap::pheatmap(dfe_lfc,fontsize = 5,cutree_rows = 10,cellwidth = 5,cellheight =5,border_color = NA) %>% 
        ggplotify::as.ggplot()

dfe_exp = dat_scaled %>% dplyr::filter( uniprot %in% dfe$ID) %>%  left_join(sc_identifiers,by=c('uniprot'='UNIPROT'))  

#p_dfe_exp=pheatmap::pheatmap(dfe_exp %>% dplyr::select(-ORF,-uniprot,-SGD) %>%column_to_rownames('GENENAME'),
#                             fontsize = 8,cellwidth = 4,cellheight =4,border_color = NA,treeheight_col = 10)

textcol <- "grey40"
# further modified ggplot
p_exp <- ggplot(dfe_exp%>%pivot_longer(where(is.numeric), names_to = 'strain', values_to='exp'), 
            aes(x=strain, y=GENENAME, fill=exp))+
  geom_tile(colour="white", size=0.1)+
  labs(x="", y="")+
  scale_fill_gradientn(colours = colorRampPalette(rev(brewer.pal(n = 7, name =
  "RdYlBu")))(100))+
  #scale_fill_manual(values=c("#d53e4f", "#f46d43", "#fdae61", "#fee08b", "#e6f598", "#abdda4", "#ddf1da"), na.value = "grey90")+
  theme_grey(base_size=10)+
  theme(legend.position="right", legend.direction="vertical",
        legend.title=element_text(colour=textcol),
        legend.margin=margin(grid::unit(0, "cm")),
        legend.text=element_text(colour=textcol, size=7, face="bold"),
        legend.key.height=grid::unit(0.8, "cm"),
        legend.key.width=grid::unit(0.2, "cm"),
        axis.text.x=element_text(size=8, angle=90,colour=textcol,hjust = 1),
        axis.text.y=element_text(vjust=0.2, colour=textcol),
        axis.ticks=element_line(size=0.4),
        plot.background=element_blank(),
        panel.border=element_blank(),
        plot.margin=margin(0.7, 0.4, 0.1, 0.2, "cm"),
        plot.title=element_text(colour=textcol, hjust=0, size=14, face="bold")
        ) + coord_equal()
p_exp
save.image(here('output',sprintf("%02d-differential-expression.rdata",chap_cur)))
# example R options set globally
options(width = 60)

# example chunk options set globally
knitr::opts_chunk$set(
  comment = "#>",
  collapse = TRUE,
  out.width="100%"
)
sessioninfo::session_info()
# example R options set globally
options(width = 60)

# example chunk options set globally
knitr::opts_chunk$set(
  comment = "#>",
  collapse = TRUE,
  out.width="100%"
)

9.2 Platform info

df_platform = devtools::session_info()$platform %>% 
  unlist(.) %>% 
  as.data.frame(.) %>% 
  rownames_to_column(.)

kable(
  df_platform,
  booktabs = T, 
  align = "l",
  caption = "(Reproducibility - platform info)", # complete caption for main document
  caption.short = " " # 
)
(#tab:platform)(Reproducibility - platform info)
rowname .
version R version 4.1.2 (2021-11-01)
os Linux Mint 20.3
system x86_64, linux-gnu
ui X11
language en_IL:en
collate en_IL.UTF-8
ctype en_IL.UTF-8
tz Asia/Jerusalem
date 2022-06-03
pandoc 2.14.0.3 @ /usr/lib/rstudio/bin/pandoc/ (via rmarkdown)

9.3 Packages loaded and used (i.e. attached to the workspace)

(#tab:loaded-packages)(Reproducibility - loaded packages)
Package Loaded version Date
ape 5.6-2 2022-03-02
BiocGenerics 0.40.0 2021-10-26
BiocManager 1.30.16 2021-06-15
Biostrings 2.62.0 2021-10-26
corrplot 0.92 2021-11-18
corrr 0.4.3 2020-11-24
cowplot 1.1.1 2020-12-30
d3Tree 0.2.2 2020-12-10
data.table 1.14.2 2021-09-27
dplyover 0.0.8.9002 2022-06-02
dplyr 1.0.9 2022-04-28
DT 0.22 2022-03-28
forcats 0.5.1 2021-01-27
formattable 0.2.1 2021-01-07
GenomeInfoDb 1.30.1 2022-01-30
geomtextpath 0.1.0 2022-01-24
GGally 2.1.2 2021-06-21
ggcorrplot 0.1.3 2019-05-19
ggfortify 0.4.14 2022-01-03
ggplot2 3.3.5 2021-06-25
ggplotify 0.1.0 2021-09-02
ggpubr 0.4.0 2020-06-27
ggrepel 0.9.1 2021-01-15
ggsci 2.9 2018-05-14
ggsignif 0.6.3 2021-09-09
ggtext 0.1.1 2020-12-17
ggthemes 4.2.4 2021-01-20
ggtree 3.2.1 2021-11-16
gplots 3.1.3 2022-04-25
gridExtra 2.3 2017-09-09
gtools 3.9.2 2021-06-06
hablar 0.3.0 2020-03-19
here 1.0.1 2020-12-13
hrbrthemes 0.8.0 2020-03-06
hutils 1.7.1 2021-07-22
IRanges 2.28.0 2021-10-26
janitor 2.1.0 2021-01-05
kableExtra 1.3.4 2021-02-20
limma 3.50.3 2022-04-07
MsCoreUtils 1.6.2 2022-02-24
NormalyzerDE 1.12.0 2021-10-26
openxlsx 4.2.5 2021-12-14
pbapply 1.5-0 2021-09-16
performance 0.8.0 2021-10-01
plotly 4.10.0 2021-10-09
purrr 0.3.4 2020-04-17
RColorBrewer 1.1-3 2022-04-03
RCurl 1.98-1.5 2021-09-17
readr 2.1.1 2021-11-30
rio 0.5.29 2021-11-22
S4Vectors 0.32.3 2021-11-21
see 0.6.8 2021-10-03
sessioninfo 1.2.2 2021-12-06
stringr 1.4.0 2019-02-10
tibble 3.1.6 2021-11-07
tictoc 1.0.1 2021-04-19
tidyr 1.2.0 2022-02-01
tidyverse 1.3.1 2021-04-15
treemap 2.4-3 2021-08-22
xfun 0.31 2022-05-10
XVector 0.34.0 2021-10-26

To reproduce this Rmarkdown document, you may need to run the following lines for loading/installing the necessary packages:

Copy paste the code below to your rsession:

install.packages(‘xfun’)

xfun::pkg_load2(c(“ape,” “BiocGenerics,” “BiocManager,” “Biostrings,” “corrplot,” “corrr,” “cowplot,” “d3Tree,” “data.table,” “dplyover,” “dplyr,” “DT,” “forcats,” “formattable,” “GenomeInfoDb,” “geomtextpath,” “GGally,” “ggcorrplot,” “ggfortify,” “ggplot2,” “ggplotify,” “ggpubr,” “ggrepel,” “ggsci,” “ggsignif,” “ggtext,” “ggthemes,” “ggtree,” “gplots,” “gridExtra,” “gtools,” “hablar,” “here,” “hrbrthemes,” “hutils,” “IRanges,” “janitor,” “kableExtra,” “limma,” “MsCoreUtils,” “NormalyzerDE,” “openxlsx,” “pbapply,” “performance,” “plotly,” “purrr,” “RColorBrewer,” “RCurl,” “readr,” “rio,” “S4Vectors,” “see,” “sessioninfo,” “stringr,” “tibble,” “tictoc,” “tidyr,” “tidyverse,” “treemap,” “xfun,” “XVector”))

Pay attention to the error message you might get.

Common errors could be due to:

  • Not having admin privileges to write in the home R directory
  • Some package installation requires prior linux libraries to be installed
  • Some packages might not be available for older R version
  • Some packages are not obtained from CRAN but from Bioconductor (it may require to use the function BiocManager::install())

9.4 All packages required (i.e. including dependencies)

(#tab:all-packages)all packages used (include dependencies)
package ondiskversion loadedversion path loadedpath attached is_base date source md5ok library
abind abind 1.4.5 1.4-5 /usr/local/lib/R/site-library/abind /usr/local/lib/R/site-library/abind FALSE FALSE 2016-07-21 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
affy affy 1.72.0 1.72.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/affy /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/affy FALSE FALSE 2021-10-26 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
affyio affyio 1.64.0 1.64.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/affyio /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/affyio FALSE FALSE 2021-10-26 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
ape ape 5.6.2 5.6-2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ape /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ape TRUE FALSE 2022-03-02 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
aplot aplot 0.1.2 0.1.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/aplot /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/aplot FALSE FALSE 2022-01-10 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
assertthat assertthat 0.2.1 0.2.1 /usr/lib/R/site-library/assertthat /usr/lib/R/site-library/assertthat FALSE FALSE 2019-03-21 CRAN (R 4.0.0) NA /usr/lib/R/site-library
backports backports 1.4.1 1.4.1 /usr/lib/R/site-library/backports /usr/lib/R/site-library/backports FALSE FALSE 2021-12-13 CRAN (R 4.1.2) NA /usr/lib/R/site-library
base64enc base64enc 0.1.3 0.1-3 /usr/lib/R/site-library/base64enc /usr/lib/R/site-library/base64enc FALSE FALSE 2015-07-28 CRAN (R 4.0.0) NA /usr/lib/R/site-library
beeswarm beeswarm 0.4.0 0.4.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/beeswarm /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/beeswarm FALSE FALSE 2021-06-01 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
Biobase Biobase 2.54.0 2.54.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/Biobase /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/Biobase FALSE FALSE 2021-10-26 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
BiocGenerics BiocGenerics 0.40.0 0.40.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/BiocGenerics /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/BiocGenerics TRUE FALSE 2021-10-26 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
BiocManager BiocManager 1.30.16 1.30.16 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/BiocManager /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/BiocManager TRUE FALSE 2021-06-15 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
Biostrings Biostrings 2.62.0 2.62.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/Biostrings /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/Biostrings TRUE FALSE 2021-10-26 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
bit bit 4.0.4 4.0.4 /usr/lib/R/site-library/bit /usr/lib/R/site-library/bit FALSE FALSE 2020-08-04 CRAN (R 4.0.2) NA /usr/lib/R/site-library
bit64 bit64 4.0.5 4.0.5 /usr/lib/R/site-library/bit64 /usr/lib/R/site-library/bit64 FALSE FALSE 2020-08-30 CRAN (R 4.0.2) NA /usr/lib/R/site-library
bitops bitops 1.0.7 1.0-7 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/bitops /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/bitops FALSE FALSE 2021-04-24 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
bookdown bookdown 0.26 0.26 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/bookdown /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/bookdown FALSE FALSE 2022-04-15 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
brio brio 1.1.3 1.1.3 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/brio /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/brio FALSE FALSE 2021-11-30 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
broom broom 0.7.11 0.7.11 /usr/lib/R/site-library/broom /usr/lib/R/site-library/broom FALSE FALSE 2022-01-03 CRAN (R 4.1.2) NA /usr/lib/R/site-library
bslib bslib 0.3.1 0.3.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/bslib /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/bslib FALSE FALSE 2021-10-06 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
cachem cachem 1.0.6 1.0.6 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/cachem /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/cachem FALSE FALSE 2021-08-19 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
callr callr 3.7.0 3.7.0 /usr/lib/R/site-library/callr /usr/lib/R/site-library/callr FALSE FALSE 2021-04-20 CRAN (R 4.0.5) NA /usr/lib/R/site-library
car car 3.0.12 3.0-12 /usr/local/lib/R/site-library/car /usr/local/lib/R/site-library/car FALSE FALSE 2021-11-06 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
carData carData 3.0.5 3.0-5 /usr/local/lib/R/site-library/carData /usr/local/lib/R/site-library/carData FALSE FALSE 2022-01-06 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
caTools caTools 1.18.2 1.18.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/caTools /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/caTools FALSE FALSE 2021-03-28 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
cellranger cellranger 1.1.0 1.1.0 /usr/lib/R/site-library/cellranger /usr/lib/R/site-library/cellranger FALSE FALSE 2016-07-27 CRAN (R 4.0.0) NA /usr/lib/R/site-library
checkmate checkmate 2.0.0 2.0.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/checkmate /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/checkmate FALSE FALSE 2020-02-06 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
class class 7.3.20 7.3-20 /usr/lib/R/library/class /usr/lib/R/library/class FALSE FALSE 2022-01-13 CRAN (R 4.1.2) NA /usr/lib/R/library
cli cli 3.3.0 3.3.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/cli /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/cli FALSE FALSE 2022-04-25 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
clue clue 0.3.60 0.3-60 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/clue /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/clue FALSE FALSE 2021-10-11 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
cluster cluster 2.1.2 2.1.2 /usr/lib/R/library/cluster /usr/lib/R/library/cluster FALSE FALSE 2021-04-17 CRAN (R 4.0.5) NA /usr/lib/R/library
codetools codetools 0.2.18 0.2-18 /usr/lib/R/library/codetools /usr/lib/R/library/codetools FALSE FALSE 2020-11-04 CRAN (R 4.0.3) NA /usr/lib/R/library
colorspace colorspace 2.0.3 2.0-3 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/colorspace /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/colorspace FALSE FALSE 2022-02-21 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
ComplexUpset ComplexUpset 1.3.3 1.3.3 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ComplexUpset /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ComplexUpset FALSE FALSE 2021-12-11 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
corrplot corrplot 0.92 0.92 /usr/local/lib/R/site-library/corrplot /usr/local/lib/R/site-library/corrplot TRUE FALSE 2021-11-18 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
corrr corrr 0.4.3 0.4.3 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/corrr /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/corrr TRUE FALSE 2020-11-24 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
cowplot cowplot 1.1.1 1.1.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/cowplot /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/cowplot TRUE FALSE 2020-12-30 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
crayon crayon 1.5.1 1.5.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/crayon /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/crayon FALSE FALSE 2022-03-26 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
crosstalk crosstalk 1.2.0 1.2.0 /usr/local/lib/R/site-library/crosstalk /usr/local/lib/R/site-library/crosstalk FALSE FALSE 2021-11-04 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
curl curl 4.3.2 4.3.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/curl /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/curl FALSE FALSE 2021-06-23 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
d3Tree d3Tree 0.2.2 0.2.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/d3Tree /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/d3Tree TRUE FALSE 2020-12-10 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
data.table data.table 1.14.2 1.14.2 /usr/lib/R/site-library/data.table /usr/lib/R/site-library/data.table TRUE FALSE 2021-09-27 CRAN (R 4.1.1) NA /usr/lib/R/site-library
DBI DBI 1.1.2 1.1.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/DBI /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/DBI FALSE FALSE 2021-12-20 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
dbplyr dbplyr 2.1.1 2.1.1 /usr/lib/R/site-library/dbplyr /usr/lib/R/site-library/dbplyr FALSE FALSE 2021-04-06 CRAN (R 4.0.5) NA /usr/lib/R/site-library
DelayedArray DelayedArray 0.20.0 0.20.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/DelayedArray /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/DelayedArray FALSE FALSE 2021-10-26 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
desc desc 1.4.1 1.4.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/desc /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/desc FALSE FALSE 2022-03-06 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
devtools devtools 2.4.3 2.4.3 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/devtools /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/devtools FALSE FALSE 2021-11-30 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
digest digest 0.6.29 0.6.29 /usr/lib/R/site-library/digest /usr/lib/R/site-library/digest FALSE FALSE 2021-12-01 CRAN (R 4.1.2) NA /usr/lib/R/site-library
downlit downlit 0.4.0 0.4.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/downlit /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/downlit FALSE FALSE 2021-10-29 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
dplyover dplyover 0.0.8.9002 0.0.8.9002 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/dplyover /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/dplyover TRUE FALSE 2022-06-02 Github () NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
dplyr dplyr 1.0.9 1.0.9 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/dplyr /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/dplyr TRUE FALSE 2022-04-28 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
DT DT 0.22 0.22 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/DT /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/DT TRUE FALSE 2022-03-28 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
e1071 e1071 1.7.9 1.7-9 /usr/local/lib/R/site-library/e1071 /usr/local/lib/R/site-library/e1071 FALSE FALSE 2021-09-16 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
ellipsis ellipsis 0.3.2 0.3.2 /usr/lib/R/site-library/ellipsis /usr/lib/R/site-library/ellipsis FALSE FALSE 2021-04-29 CRAN (R 4.0.5) NA /usr/lib/R/site-library
evaluate evaluate 0.14 0.14 /usr/lib/R/site-library/evaluate /usr/lib/R/site-library/evaluate FALSE FALSE 2019-05-28 CRAN (R 4.0.0) NA /usr/lib/R/site-library
extrafont extrafont 0.17 0.17 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/extrafont /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/extrafont FALSE FALSE 2014-12-08 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
extrafontdb extrafontdb 1.0 1.0 /usr/local/lib/R/site-library/extrafontdb /usr/local/lib/R/site-library/extrafontdb FALSE FALSE 2012-06-11 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
fansi fansi 1.0.3 1.0.3 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/fansi /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/fansi FALSE FALSE 2022-03-24 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
farver farver 2.1.0 2.1.0 /usr/lib/R/site-library/farver /usr/lib/R/site-library/farver FALSE FALSE 2021-02-28 CRAN (R 4.0.4) NA /usr/lib/R/site-library
fastmap fastmap 1.1.0 1.1.0 /usr/lib/R/site-library/fastmap /usr/lib/R/site-library/fastmap FALSE FALSE 2021-01-25 CRAN (R 4.0.3) NA /usr/lib/R/site-library
fastmatch fastmatch 1.1.3 1.1-3 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/fastmatch /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/fastmatch FALSE FALSE 2021-07-23 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
forcats forcats 0.5.1 0.5.1 /usr/lib/R/site-library/forcats /usr/lib/R/site-library/forcats TRUE FALSE 2021-01-27 CRAN (R 4.0.3) NA /usr/lib/R/site-library
foreign foreign 0.8.82 0.8-82 /usr/lib/R/library/foreign /usr/lib/R/library/foreign FALSE FALSE 2022-01-13 CRAN (R 4.1.2) NA /usr/lib/R/library
formattable formattable 0.2.1 0.2.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/formattable /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/formattable TRUE FALSE 2021-01-07 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
Formula Formula 1.2.4 1.2-4 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/Formula /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/Formula FALSE FALSE 2020-10-16 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
fs fs 1.5.2 1.5.2 /usr/lib/R/site-library/fs /usr/lib/R/site-library/fs FALSE FALSE 2021-12-08 CRAN (R 4.1.2) NA /usr/lib/R/site-library
gdtools gdtools 0.2.3 0.2.3 /usr/local/lib/R/site-library/gdtools /usr/local/lib/R/site-library/gdtools FALSE FALSE 2021-01-06 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
generics generics 0.1.2 0.1.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/generics /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/generics FALSE FALSE 2022-01-31 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
GenomeInfoDb GenomeInfoDb 1.30.1 1.30.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/GenomeInfoDb /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/GenomeInfoDb TRUE FALSE 2022-01-30 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
GenomeInfoDbData GenomeInfoDbData 1.2.7 1.2.7 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/GenomeInfoDbData /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/GenomeInfoDbData FALSE FALSE 2022-01-25 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
GenomicRanges GenomicRanges 1.46.1 1.46.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/GenomicRanges /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/GenomicRanges FALSE FALSE 2021-11-18 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
geomtextpath geomtextpath 0.1.0 0.1.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/geomtextpath /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/geomtextpath TRUE FALSE 2022-01-24 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
GGally GGally 2.1.2 2.1.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/GGally /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/GGally TRUE FALSE 2021-06-21 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
ggbeeswarm ggbeeswarm 0.6.0 0.6.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ggbeeswarm /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ggbeeswarm FALSE FALSE 2017-08-07 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
ggcorrplot ggcorrplot 0.1.3 0.1.3 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ggcorrplot /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ggcorrplot TRUE FALSE 2019-05-19 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
ggfortify ggfortify 0.4.14 0.4.14 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ggfortify /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ggfortify TRUE FALSE 2022-01-03 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
ggfun ggfun 0.0.5 0.0.5 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ggfun /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ggfun FALSE FALSE 2022-01-20 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
ggplot2 ggplot2 3.3.5 3.3.5 /usr/lib/R/site-library/ggplot2 /usr/lib/R/site-library/ggplot2 TRUE FALSE 2021-06-25 CRAN (R 4.1.0) NA /usr/lib/R/site-library
ggplotify ggplotify 0.1.0 0.1.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ggplotify /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ggplotify TRUE FALSE 2021-09-02 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
ggpubr ggpubr 0.4.0 0.4.0 /usr/local/lib/R/site-library/ggpubr /usr/local/lib/R/site-library/ggpubr TRUE FALSE 2020-06-27 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
ggrepel ggrepel 0.9.1 0.9.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ggrepel /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ggrepel TRUE FALSE 2021-01-15 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
ggsci ggsci 2.9 2.9 /usr/local/lib/R/site-library/ggsci /usr/local/lib/R/site-library/ggsci TRUE FALSE 2018-05-14 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
ggsignif ggsignif 0.6.3 0.6.3 /usr/local/lib/R/site-library/ggsignif /usr/local/lib/R/site-library/ggsignif TRUE FALSE 2021-09-09 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
ggtext ggtext 0.1.1 0.1.1 /usr/local/lib/R/site-library/ggtext /usr/local/lib/R/site-library/ggtext TRUE FALSE 2020-12-17 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
ggthemes ggthemes 4.2.4 4.2.4 /usr/local/lib/R/site-library/ggthemes /usr/local/lib/R/site-library/ggthemes TRUE FALSE 2021-01-20 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
ggtree ggtree 3.2.1 3.2.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ggtree /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/ggtree TRUE FALSE 2021-11-16 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
glue glue 1.6.2 1.6.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/glue /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/glue FALSE FALSE 2022-02-24 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
gplots gplots 3.1.3 3.1.3 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/gplots /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/gplots TRUE FALSE 2022-04-25 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
gridBase gridBase 0.4.7 0.4-7 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/gridBase /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/gridBase FALSE FALSE 2014-02-24 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
gridExtra gridExtra 2.3 2.3 /usr/local/lib/R/site-library/gridExtra /usr/local/lib/R/site-library/gridExtra TRUE FALSE 2017-09-09 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
gridGraphics gridGraphics 0.5.1 0.5-1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/gridGraphics /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/gridGraphics FALSE FALSE 2020-12-13 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
gridtext gridtext 0.1.4 0.1.4 /usr/local/lib/R/site-library/gridtext /usr/local/lib/R/site-library/gridtext FALSE FALSE 2020-12-10 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
gtable gtable 0.3.0 0.3.0 /usr/lib/R/site-library/gtable /usr/lib/R/site-library/gtable FALSE FALSE 2019-03-25 CRAN (R 4.0.0) NA /usr/lib/R/site-library
gtools gtools 3.9.2 3.9.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/gtools /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/gtools TRUE FALSE 2021-06-06 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
hablar hablar 0.3.0 0.3.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/hablar /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/hablar TRUE FALSE 2020-03-19 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
haven haven 2.4.3 2.4.3 /usr/lib/R/site-library/haven /usr/lib/R/site-library/haven FALSE FALSE 2021-08-04 CRAN (R 4.1.0) NA /usr/lib/R/site-library
here here 1.0.1 1.0.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/here /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/here TRUE FALSE 2020-12-13 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
highr highr 0.9 0.9 /usr/lib/R/site-library/highr /usr/lib/R/site-library/highr FALSE FALSE 2021-04-16 CRAN (R 4.0.5) NA /usr/lib/R/site-library
Hmisc Hmisc 4.6.0 4.6-0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/Hmisc /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/Hmisc FALSE FALSE 2021-10-07 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
hms hms 1.1.1 1.1.1 /usr/lib/R/site-library/hms /usr/lib/R/site-library/hms FALSE FALSE 2021-09-26 CRAN (R 4.1.1) NA /usr/lib/R/site-library
hrbrthemes hrbrthemes 0.8.0 0.8.0 /usr/local/lib/R/site-library/hrbrthemes /usr/local/lib/R/site-library/hrbrthemes TRUE FALSE 2020-03-06 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
htmlTable htmlTable 2.4.0 2.4.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/htmlTable /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/htmlTable FALSE FALSE 2022-01-04 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
htmltools htmltools 0.5.2 0.5.2 /usr/lib/R/site-library/htmltools /usr/lib/R/site-library/htmltools FALSE FALSE 2021-08-25 CRAN (R 4.1.1) NA /usr/lib/R/site-library
htmlwidgets htmlwidgets 1.5.4 1.5.4 /usr/local/lib/R/site-library/htmlwidgets /usr/local/lib/R/site-library/htmlwidgets FALSE FALSE 2021-09-08 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
httpuv httpuv 1.6.5 1.6.5 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/httpuv /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/httpuv FALSE FALSE 2022-01-05 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
httr httr 1.4.2 1.4.2 /usr/lib/R/site-library/httr /usr/lib/R/site-library/httr FALSE FALSE 2020-07-20 CRAN (R 4.0.2) NA /usr/lib/R/site-library
hutils hutils 1.7.1 1.7.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/hutils /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/hutils TRUE FALSE 2021-07-22 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
igraph igraph 1.2.11 1.2.11 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/igraph /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/igraph FALSE FALSE 2022-01-04 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
insight insight 0.15.0 0.15.0 /usr/local/lib/R/site-library/insight /usr/local/lib/R/site-library/insight FALSE FALSE 2022-01-07 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
IRanges IRanges 2.28.0 2.28.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/IRanges /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/IRanges TRUE FALSE 2021-10-26 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
janitor janitor 2.1.0 2.1.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/janitor /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/janitor TRUE FALSE 2021-01-05 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
jpeg jpeg 0.1.9 0.1-9 /usr/local/lib/R/site-library/jpeg /usr/local/lib/R/site-library/jpeg FALSE FALSE 2021-07-24 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
jquerylib jquerylib 0.1.4 0.1.4 /usr/lib/R/site-library/jquerylib /usr/lib/R/site-library/jquerylib FALSE FALSE 2021-04-26 CRAN (R 4.0.5) NA /usr/lib/R/site-library
jsonlite jsonlite 1.8.0 1.8.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/jsonlite /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/jsonlite FALSE FALSE 2022-02-22 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
kableExtra kableExtra 1.3.4 1.3.4 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/kableExtra /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/kableExtra TRUE FALSE 2021-02-20 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
KernSmooth KernSmooth 2.23.20 2.23-20 /usr/lib/R/library/KernSmooth /usr/lib/R/library/KernSmooth FALSE FALSE 2021-05-03 CRAN (R 4.0.5) NA /usr/lib/R/library
knitr knitr 1.37 1.37 /usr/lib/R/site-library/knitr /usr/lib/R/site-library/knitr FALSE FALSE 2021-12-16 CRAN (R 4.1.2) NA /usr/lib/R/site-library
labeling labeling 0.4.2 0.4.2 /usr/lib/R/site-library/labeling /usr/lib/R/site-library/labeling FALSE FALSE 2020-10-20 CRAN (R 4.0.3) NA /usr/lib/R/site-library
later later 1.3.0 1.3.0 /usr/local/lib/R/site-library/later /usr/local/lib/R/site-library/later FALSE FALSE 2021-08-18 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
lattice lattice 0.20.45 0.20-45 /usr/lib/R/library/lattice /usr/lib/R/library/lattice FALSE FALSE 2021-09-22 CRAN (R 4.1.1) NA /usr/lib/R/library
latticeExtra latticeExtra 0.6.29 0.6-29 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/latticeExtra /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/latticeExtra FALSE FALSE 2019-12-19 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
lazyeval lazyeval 0.2.2 0.2.2 /usr/local/lib/R/site-library/lazyeval /usr/local/lib/R/site-library/lazyeval FALSE FALSE 2019-03-15 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
lifecycle lifecycle 1.0.1 1.0.1 /usr/lib/R/site-library/lifecycle /usr/lib/R/site-library/lifecycle FALSE FALSE 2021-09-24 CRAN (R 4.1.1) NA /usr/lib/R/site-library
limma limma 3.50.3 3.50.3 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/limma /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/limma TRUE FALSE 2022-04-07 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
lubridate lubridate 1.8.0 1.8.0 /usr/lib/R/site-library/lubridate /usr/lib/R/site-library/lubridate FALSE FALSE 2021-10-07 CRAN (R 4.1.1) NA /usr/lib/R/site-library
magrittr magrittr 2.0.3 2.0.3 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/magrittr /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/magrittr FALSE FALSE 2022-03-30 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
MASS MASS 7.3.55 7.3-55 /usr/lib/R/library/MASS /usr/lib/R/library/MASS FALSE FALSE 2022-01-13 CRAN (R 4.1.2) NA /usr/lib/R/library
Matrix Matrix 1.4.0 1.4-0 /usr/lib/R/library/Matrix /usr/lib/R/library/Matrix FALSE FALSE 2021-12-08 CRAN (R 4.1.2) NA /usr/lib/R/library
MatrixGenerics MatrixGenerics 1.6.0 1.6.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/MatrixGenerics /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/MatrixGenerics FALSE FALSE 2021-10-26 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
matrixStats matrixStats 0.61.0 0.61.0 /usr/local/lib/R/site-library/matrixStats /usr/local/lib/R/site-library/matrixStats FALSE FALSE 2021-09-17 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
memoise memoise 2.0.1 2.0.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/memoise /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/memoise FALSE FALSE 2021-11-26 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
mgcv mgcv 1.8.38 1.8-38 /usr/lib/R/library/mgcv /usr/lib/R/library/mgcv FALSE FALSE 2021-10-06 CRAN (R 4.1.1) NA /usr/lib/R/library
mime mime 0.12 0.12 /usr/lib/R/site-library/mime /usr/lib/R/site-library/mime FALSE FALSE 2021-09-28 CRAN (R 4.1.1) NA /usr/lib/R/site-library
modelr modelr 0.1.8 0.1.8 /usr/lib/R/site-library/modelr /usr/lib/R/site-library/modelr FALSE FALSE 2020-05-19 CRAN (R 4.0.0) NA /usr/lib/R/site-library
MsCoreUtils MsCoreUtils 1.6.2 1.6.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/MsCoreUtils /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/MsCoreUtils TRUE FALSE 2022-02-24 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
munsell munsell 0.5.0 0.5.0 /usr/lib/R/site-library/munsell /usr/lib/R/site-library/munsell FALSE FALSE 2018-06-12 CRAN (R 4.0.0) NA /usr/lib/R/site-library
nlme nlme 3.1.155 3.1-155 /usr/lib/R/library/nlme /usr/lib/R/library/nlme FALSE FALSE 2022-01-13 CRAN (R 4.1.2) NA /usr/lib/R/library
nnet nnet 7.3.17 7.3-17 /usr/lib/R/library/nnet /usr/lib/R/library/nnet FALSE FALSE 2022-01-13 CRAN (R 4.1.2) NA /usr/lib/R/library
NormalyzerDE NormalyzerDE 1.12.0 1.12.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/NormalyzerDE /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/NormalyzerDE TRUE FALSE 2021-10-26 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
nortest nortest 1.0.4 1.0-4 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/nortest /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/nortest FALSE FALSE 2015-07-30 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
openxlsx openxlsx 4.2.5 4.2.5 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/openxlsx /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/openxlsx TRUE FALSE 2021-12-14 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
patchwork patchwork 1.1.1 1.1.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/patchwork /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/patchwork FALSE FALSE 2020-12-17 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
pbapply pbapply 1.5.0 1.5-0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/pbapply /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/pbapply TRUE FALSE 2021-09-16 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
pcaMethods pcaMethods 1.86.0 1.86.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/pcaMethods /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/pcaMethods FALSE FALSE 2021-10-26 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
performance performance 0.8.0 0.8.0 /usr/local/lib/R/site-library/performance /usr/local/lib/R/site-library/performance TRUE FALSE 2021-10-01 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
pheatmap pheatmap 1.0.12 1.0.12 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/pheatmap /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/pheatmap FALSE FALSE 2019-01-04 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
pillar pillar 1.7.0 1.7.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/pillar /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/pillar FALSE FALSE 2022-02-01 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
pkgbuild pkgbuild 1.3.1 1.3.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/pkgbuild /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/pkgbuild FALSE FALSE 2021-12-20 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
pkgconfig pkgconfig 2.0.3 2.0.3 /usr/lib/R/site-library/pkgconfig /usr/lib/R/site-library/pkgconfig FALSE FALSE 2019-09-22 CRAN (R 4.0.0) NA /usr/lib/R/site-library
pkgload pkgload 1.2.4 1.2.4 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/pkgload /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/pkgload FALSE FALSE 2021-11-30 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
plotly plotly 4.10.0 4.10.0 /usr/local/lib/R/site-library/plotly /usr/local/lib/R/site-library/plotly TRUE FALSE 2021-10-09 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
plyr plyr 1.8.6 1.8.6 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/plyr /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/plyr FALSE FALSE 2020-03-03 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
png png 0.1.7 0.1-7 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/png /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/png FALSE FALSE 2013-12-03 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
preprocessCore preprocessCore 1.56.0 1.56.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/preprocessCore /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/preprocessCore FALSE FALSE 2021-10-26 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
prettyunits prettyunits 1.1.1 1.1.1 /usr/lib/R/site-library/prettyunits /usr/lib/R/site-library/prettyunits FALSE FALSE 2020-01-24 CRAN (R 4.0.0) NA /usr/lib/R/site-library
processx processx 3.5.2 3.5.2 /usr/lib/R/site-library/processx /usr/lib/R/site-library/processx FALSE FALSE 2021-04-30 CRAN (R 4.0.5) NA /usr/lib/R/site-library
promises promises 1.2.0.1 1.2.0.1 /usr/local/lib/R/site-library/promises /usr/local/lib/R/site-library/promises FALSE FALSE 2021-02-11 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
proxy proxy 0.4.26 0.4-26 /usr/local/lib/R/site-library/proxy /usr/local/lib/R/site-library/proxy FALSE FALSE 2021-06-07 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
ps ps 1.6.0 1.6.0 /usr/lib/R/site-library/ps /usr/lib/R/site-library/ps FALSE FALSE 2021-02-28 CRAN (R 4.0.4) NA /usr/lib/R/site-library
purrr purrr 0.3.4 0.3.4 /usr/lib/R/site-library/purrr /usr/lib/R/site-library/purrr TRUE FALSE 2020-04-17 CRAN (R 4.0.0) NA /usr/lib/R/site-library
R6 R6 2.5.1 2.5.1 /usr/lib/R/site-library/R6 /usr/lib/R/site-library/R6 FALSE FALSE 2021-08-19 CRAN (R 4.1.1) NA /usr/lib/R/site-library
raster raster 3.5.15 3.5-15 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/raster /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/raster FALSE FALSE 2022-01-22 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
RcmdrMisc RcmdrMisc 2.7.2 2.7-2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/RcmdrMisc /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/RcmdrMisc FALSE FALSE 2022-01-05 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
RColorBrewer RColorBrewer 1.1.3 1.1-3 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/RColorBrewer /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/RColorBrewer TRUE FALSE 2022-04-03 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
Rcpp Rcpp 1.0.8 1.0.8 /usr/lib/R/site-library/Rcpp /usr/lib/R/site-library/Rcpp FALSE FALSE 2022-01-13 CRAN (R 4.1.2) NA /usr/lib/R/site-library
RCurl RCurl 1.98.1.5 1.98-1.5 /usr/lib/R/site-library/RCurl /usr/lib/R/site-library/RCurl TRUE FALSE 2021-09-17 CRAN (R 4.1.1) NA /usr/lib/R/site-library
readr readr 2.1.1 2.1.1 /usr/lib/R/site-library/readr /usr/lib/R/site-library/readr TRUE FALSE 2021-11-30 CRAN (R 4.1.2) NA /usr/lib/R/site-library
readxl readxl 1.3.1 1.3.1 /usr/lib/R/site-library/readxl /usr/lib/R/site-library/readxl FALSE FALSE 2019-03-13 CRAN (R 4.0.0) NA /usr/lib/R/site-library
remotes remotes 2.4.2 2.4.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/remotes /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/remotes FALSE FALSE 2021-11-30 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
reprex reprex 2.0.1 2.0.1 /usr/lib/R/site-library/reprex /usr/lib/R/site-library/reprex FALSE FALSE 2021-08-05 CRAN (R 4.1.0) NA /usr/lib/R/site-library
reshape reshape 0.8.8 0.8.8 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/reshape /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/reshape FALSE FALSE 2018-10-23 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
reshape2 reshape2 1.4.4 1.4.4 /usr/local/lib/R/site-library/reshape2 /usr/local/lib/R/site-library/reshape2 FALSE FALSE 2020-04-09 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
rio rio 0.5.29 0.5.29 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/rio /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/rio TRUE FALSE 2021-11-22 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
rlang rlang 1.0.2 1.0.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/rlang /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/rlang FALSE FALSE 2022-03-04 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
rmarkdown rmarkdown 2.14 2.14 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/rmarkdown /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/rmarkdown FALSE FALSE 2022-04-25 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
rpart rpart 4.1.16 4.1.16 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/rpart /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/rpart FALSE FALSE 2022-01-24 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
rprojroot rprojroot 2.0.2 2.0.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/rprojroot /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/rprojroot FALSE FALSE 2020-11-15 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
rstatix rstatix 0.7.0 0.7.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/rstatix /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/rstatix FALSE FALSE 2021-02-13 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
rstudioapi rstudioapi 0.13 0.13 /usr/lib/R/site-library/rstudioapi /usr/lib/R/site-library/rstudioapi FALSE FALSE 2020-11-12 CRAN (R 4.0.3) NA /usr/lib/R/site-library
Rttf2pt1 Rttf2pt1 1.3.8 1.3.8 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/Rttf2pt1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/Rttf2pt1 FALSE FALSE 2020-01-10 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
rvest rvest 1.0.2 1.0.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/rvest /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/rvest FALSE FALSE 2021-10-16 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
S4Vectors S4Vectors 0.32.3 0.32.3 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/S4Vectors /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/S4Vectors TRUE FALSE 2021-11-21 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
sandwich sandwich 3.0.1 3.0-1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/sandwich /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/sandwich FALSE FALSE 2021-05-18 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
sass sass 0.4.0 0.4.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/sass /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/sass FALSE FALSE 2021-05-12 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
scales scales 1.2.0 1.2.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/scales /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/scales FALSE FALSE 2022-04-13 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
see see 0.6.8 0.6.8 /usr/local/lib/R/site-library/see /usr/local/lib/R/site-library/see TRUE FALSE 2021-10-03 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
sessioninfo sessioninfo 1.2.2 1.2.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/sessioninfo /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/sessioninfo TRUE FALSE 2021-12-06 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
shiny shiny 1.7.1 1.7.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/shiny /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/shiny FALSE FALSE 2021-10-02 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
snakecase snakecase 0.11.0 0.11.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/snakecase /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/snakecase FALSE FALSE 2019-05-25 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
sp sp 1.4.6 1.4-6 /usr/local/lib/R/site-library/sp /usr/local/lib/R/site-library/sp FALSE FALSE 2021-11-14 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
statmod statmod 1.4.36 1.4.36 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/statmod /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/statmod FALSE FALSE 2021-05-10 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
stringi stringi 1.7.6 1.7.6 /usr/lib/R/site-library/stringi /usr/lib/R/site-library/stringi FALSE FALSE 2021-11-29 CRAN (R 4.1.2) NA /usr/lib/R/site-library
stringr stringr 1.4.0 1.4.0 /usr/lib/R/site-library/stringr /usr/lib/R/site-library/stringr TRUE FALSE 2019-02-10 CRAN (R 4.0.0) NA /usr/lib/R/site-library
SummarizedExperiment SummarizedExperiment 1.24.0 1.24.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/SummarizedExperiment /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/SummarizedExperiment FALSE FALSE 2021-10-26 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
survival survival 3.2.13 3.2-13 /usr/lib/R/library/survival /usr/lib/R/library/survival FALSE FALSE 2021-08-24 CRAN (R 4.1.1) NA /usr/lib/R/library
svglite svglite 2.0.0 2.0.0 /usr/lib/R/site-library/svglite /usr/lib/R/site-library/svglite FALSE FALSE 2021-02-20 CRAN (R 4.0.4) NA /usr/lib/R/site-library
systemfonts systemfonts 1.0.3 1.0.3 /usr/lib/R/site-library/systemfonts /usr/lib/R/site-library/systemfonts FALSE FALSE 2021-10-13 CRAN (R 4.1.1) NA /usr/lib/R/site-library
terra terra 1.5.21 1.5-21 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/terra /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/terra FALSE FALSE 2022-02-17 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
testthat testthat 3.1.2 3.1.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/testthat /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/testthat FALSE FALSE 2022-01-20 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
textshaping textshaping 0.3.6 0.3.6 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/textshaping /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/textshaping FALSE FALSE 2021-10-13 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
tibble tibble 3.1.6 3.1.6 /usr/lib/R/site-library/tibble /usr/lib/R/site-library/tibble TRUE FALSE 2021-11-07 CRAN (R 4.1.2) NA /usr/lib/R/site-library
tictoc tictoc 1.0.1 1.0.1 /usr/local/lib/R/site-library/tictoc /usr/local/lib/R/site-library/tictoc TRUE FALSE 2021-04-19 CRAN (R 4.1.2) NA /usr/local/lib/R/site-library
tidyr tidyr 1.2.0 1.2.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/tidyr /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/tidyr TRUE FALSE 2022-02-01 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
tidyselect tidyselect 1.1.2 1.1.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/tidyselect /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/tidyselect FALSE FALSE 2022-02-21 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
tidytree tidytree 0.3.9 0.3.9 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/tidytree /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/tidytree FALSE FALSE 2022-03-04 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
tidyverse tidyverse 1.3.1 1.3.1 /usr/lib/R/site-library/tidyverse /usr/lib/R/site-library/tidyverse TRUE FALSE 2021-04-15 CRAN (R 4.0.5) NA /usr/lib/R/site-library
treeio treeio 1.18.1 1.18.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/treeio /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/treeio FALSE FALSE 2021-11-14 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
treemap treemap 2.4.3 2.4-3 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/treemap /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/treemap TRUE FALSE 2021-08-22 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
tzdb tzdb 0.2.0 0.2.0 /usr/lib/R/site-library/tzdb /usr/lib/R/site-library/tzdb FALSE FALSE 2021-10-27 CRAN (R 4.1.1) NA /usr/lib/R/site-library
usethis usethis 2.1.5 2.1.5 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/usethis /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/usethis FALSE FALSE 2021-12-09 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
utf8 utf8 1.2.2 1.2.2 /usr/lib/R/site-library/utf8 /usr/lib/R/site-library/utf8 FALSE FALSE 2021-07-24 CRAN (R 4.1.0) NA /usr/lib/R/site-library
vctrs vctrs 0.4.1 0.4.1 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/vctrs /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/vctrs FALSE FALSE 2022-04-13 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
vipor vipor 0.4.5 0.4.5 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/vipor /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/vipor FALSE FALSE 2017-03-22 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
viridisLite viridisLite 0.4.0 0.4.0 /usr/lib/R/site-library/viridisLite /usr/lib/R/site-library/viridisLite FALSE FALSE 2021-04-13 CRAN (R 4.0.5) NA /usr/lib/R/site-library
vroom vroom 1.5.7 1.5.7 /usr/lib/R/site-library/vroom /usr/lib/R/site-library/vroom FALSE FALSE 2021-11-30 CRAN (R 4.1.2) NA /usr/lib/R/site-library
vsn vsn 3.62.0 3.62.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/vsn /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/vsn FALSE FALSE 2021-10-26 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
webshot webshot 0.5.2 0.5.2 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/webshot /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/webshot FALSE FALSE 2019-11-22 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
withr withr 2.5.0 2.5.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/withr /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/withr FALSE FALSE 2022-03-03 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
xfun xfun 0.31 0.31 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/xfun /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/xfun TRUE FALSE 2022-05-10 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
xml2 xml2 1.3.3 1.3.3 /usr/lib/R/site-library/xml2 /usr/lib/R/site-library/xml2 FALSE FALSE 2021-11-30 CRAN (R 4.1.2) NA /usr/lib/R/site-library
xtable xtable 1.8.4 1.8-4 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/xtable /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/xtable FALSE FALSE 2019-04-21 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
XVector XVector 0.34.0 0.34.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/XVector /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/XVector TRUE FALSE 2021-10-26 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
yaml yaml 2.2.1 2.2.1 /usr/lib/R/site-library/yaml /usr/lib/R/site-library/yaml FALSE FALSE 2020-02-01 CRAN (R 4.0.0) NA /usr/lib/R/site-library
yulab.utils yulab.utils 0.0.4 0.0.4 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/yulab.utils /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/yulab.utils FALSE FALSE 2021-10-09 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
zip zip 2.2.0 2.2.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/zip /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/zip FALSE FALSE 2021-05-31 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
zlibbioc zlibbioc 1.40.0 1.40.0 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/zlibbioc /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/zlibbioc FALSE FALSE 2021-10-26 Bioconductor NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
zoo zoo 1.8.10 1.8-10 /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/zoo /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1/zoo FALSE FALSE 2022-04-15 CRAN (R 4.1.2) NA /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1

9.5 Session info

sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────
#>  setting  value
#>  version  R version 4.1.2 (2021-11-01)
#>  os       Linux Mint 20.3
#>  system   x86_64, linux-gnu
#>  ui       X11
#>  language en_IL:en
#>  collate  en_IL.UTF-8
#>  ctype    en_IL.UTF-8
#>  tz       Asia/Jerusalem
#>  date     2022-06-03
#>  pandoc   2.14.0.3 @ /usr/lib/rstudio/bin/pandoc/ (via rmarkdown)
#> 
#> ─ Packages ───────────────────────────────────────────────
#>  package              * version    date (UTC) lib source
#>  abind                  1.4-5      2016-07-21 [2] CRAN (R 4.1.2)
#>  affy                   1.72.0     2021-10-26 [1] Bioconductor
#>  affyio                 1.64.0     2021-10-26 [1] Bioconductor
#>  ape                  * 5.6-2      2022-03-02 [1] CRAN (R 4.1.2)
#>  aplot                  0.1.2      2022-01-10 [1] CRAN (R 4.1.2)
#>  assertthat             0.2.1      2019-03-21 [3] CRAN (R 4.0.0)
#>  backports              1.4.1      2021-12-13 [3] CRAN (R 4.1.2)
#>  base64enc              0.1-3      2015-07-28 [3] CRAN (R 4.0.0)
#>  beeswarm               0.4.0      2021-06-01 [1] CRAN (R 4.1.2)
#>  Biobase                2.54.0     2021-10-26 [1] Bioconductor
#>  BiocGenerics         * 0.40.0     2021-10-26 [1] Bioconductor
#>  BiocManager          * 1.30.16    2021-06-15 [1] CRAN (R 4.1.2)
#>  Biostrings           * 2.62.0     2021-10-26 [1] Bioconductor
#>  bit                    4.0.4      2020-08-04 [3] CRAN (R 4.0.2)
#>  bit64                  4.0.5      2020-08-30 [3] CRAN (R 4.0.2)
#>  bitops                 1.0-7      2021-04-24 [1] CRAN (R 4.1.2)
#>  bookdown               0.26       2022-04-15 [1] CRAN (R 4.1.2)
#>  brio                   1.1.3      2021-11-30 [1] CRAN (R 4.1.2)
#>  broom                  0.7.11     2022-01-03 [3] CRAN (R 4.1.2)
#>  bslib                  0.3.1      2021-10-06 [1] CRAN (R 4.1.2)
#>  cachem                 1.0.6      2021-08-19 [1] CRAN (R 4.1.2)
#>  callr                  3.7.0      2021-04-20 [3] CRAN (R 4.0.5)
#>  car                    3.0-12     2021-11-06 [2] CRAN (R 4.1.2)
#>  carData                3.0-5      2022-01-06 [2] CRAN (R 4.1.2)
#>  caTools                1.18.2     2021-03-28 [1] CRAN (R 4.1.2)
#>  cellranger             1.1.0      2016-07-27 [3] CRAN (R 4.0.0)
#>  checkmate              2.0.0      2020-02-06 [1] CRAN (R 4.1.2)
#>  class                  7.3-20     2022-01-13 [4] CRAN (R 4.1.2)
#>  cli                    3.3.0      2022-04-25 [1] CRAN (R 4.1.2)
#>  clue                   0.3-60     2021-10-11 [1] CRAN (R 4.1.2)
#>  cluster                2.1.2      2021-04-17 [4] CRAN (R 4.0.5)
#>  codetools              0.2-18     2020-11-04 [4] CRAN (R 4.0.3)
#>  colorspace             2.0-3      2022-02-21 [1] CRAN (R 4.1.2)
#>  ComplexUpset           1.3.3      2021-12-11 [1] CRAN (R 4.1.2)
#>  corrplot             * 0.92       2021-11-18 [2] CRAN (R 4.1.2)
#>  corrr                * 0.4.3      2020-11-24 [1] CRAN (R 4.1.2)
#>  cowplot              * 1.1.1      2020-12-30 [1] CRAN (R 4.1.2)
#>  crayon                 1.5.1      2022-03-26 [1] CRAN (R 4.1.2)
#>  crosstalk              1.2.0      2021-11-04 [2] CRAN (R 4.1.2)
#>  curl                   4.3.2      2021-06-23 [1] CRAN (R 4.1.2)
#>  d3Tree               * 0.2.2      2020-12-10 [1] CRAN (R 4.1.2)
#>  data.table           * 1.14.2     2021-09-27 [3] CRAN (R 4.1.1)
#>  DBI                    1.1.2      2021-12-20 [1] CRAN (R 4.1.2)
#>  dbplyr                 2.1.1      2021-04-06 [3] CRAN (R 4.0.5)
#>  DelayedArray           0.20.0     2021-10-26 [1] Bioconductor
#>  desc                   1.4.1      2022-03-06 [1] CRAN (R 4.1.2)
#>  devtools               2.4.3      2021-11-30 [1] CRAN (R 4.1.2)
#>  digest                 0.6.29     2021-12-01 [3] CRAN (R 4.1.2)
#>  downlit                0.4.0      2021-10-29 [1] CRAN (R 4.1.2)
#>  dplyover             * 0.0.8.9002 2022-06-02 [1] Github (TimTeaFan/dplyover@f0cd984)
#>  dplyr                * 1.0.9      2022-04-28 [1] CRAN (R 4.1.2)
#>  DT                   * 0.22       2022-03-28 [1] CRAN (R 4.1.2)
#>  e1071                  1.7-9      2021-09-16 [2] CRAN (R 4.1.2)
#>  ellipsis               0.3.2      2021-04-29 [3] CRAN (R 4.0.5)
#>  evaluate               0.14       2019-05-28 [3] CRAN (R 4.0.0)
#>  extrafont              0.17       2014-12-08 [1] CRAN (R 4.1.2)
#>  extrafontdb            1.0        2012-06-11 [2] CRAN (R 4.1.2)
#>  fansi                  1.0.3      2022-03-24 [1] CRAN (R 4.1.2)
#>  farver                 2.1.0      2021-02-28 [3] CRAN (R 4.0.4)
#>  fastmap                1.1.0      2021-01-25 [3] CRAN (R 4.0.3)
#>  fastmatch              1.1-3      2021-07-23 [1] CRAN (R 4.1.2)
#>  forcats              * 0.5.1      2021-01-27 [3] CRAN (R 4.0.3)
#>  foreign                0.8-82     2022-01-13 [4] CRAN (R 4.1.2)
#>  formattable          * 0.2.1      2021-01-07 [1] CRAN (R 4.1.2)
#>  Formula                1.2-4      2020-10-16 [1] CRAN (R 4.1.2)
#>  fs                     1.5.2      2021-12-08 [3] CRAN (R 4.1.2)
#>  gdtools                0.2.3      2021-01-06 [2] CRAN (R 4.1.2)
#>  generics               0.1.2      2022-01-31 [1] CRAN (R 4.1.2)
#>  GenomeInfoDb         * 1.30.1     2022-01-30 [1] Bioconductor
#>  GenomeInfoDbData       1.2.7      2022-01-25 [1] Bioconductor
#>  GenomicRanges          1.46.1     2021-11-18 [1] Bioconductor
#>  geomtextpath         * 0.1.0      2022-01-24 [1] CRAN (R 4.1.2)
#>  GGally               * 2.1.2      2021-06-21 [1] CRAN (R 4.1.2)
#>  ggbeeswarm             0.6.0      2017-08-07 [1] CRAN (R 4.1.2)
#>  ggcorrplot           * 0.1.3      2019-05-19 [1] CRAN (R 4.1.2)
#>  ggfortify            * 0.4.14     2022-01-03 [1] CRAN (R 4.1.2)
#>  ggfun                  0.0.5      2022-01-20 [1] CRAN (R 4.1.2)
#>  ggplot2              * 3.3.5      2021-06-25 [3] CRAN (R 4.1.0)
#>  ggplotify            * 0.1.0      2021-09-02 [1] CRAN (R 4.1.2)
#>  ggpubr               * 0.4.0      2020-06-27 [2] CRAN (R 4.1.2)
#>  ggrepel              * 0.9.1      2021-01-15 [1] CRAN (R 4.1.2)
#>  ggsci                * 2.9        2018-05-14 [2] CRAN (R 4.1.2)
#>  ggsignif             * 0.6.3      2021-09-09 [2] CRAN (R 4.1.2)
#>  ggtext               * 0.1.1      2020-12-17 [2] CRAN (R 4.1.2)
#>  ggthemes             * 4.2.4      2021-01-20 [2] CRAN (R 4.1.2)
#>  ggtree               * 3.2.1      2021-11-16 [1] Bioconductor
#>  glue                   1.6.2      2022-02-24 [1] CRAN (R 4.1.2)
#>  gplots               * 3.1.3      2022-04-25 [1] CRAN (R 4.1.2)
#>  gridBase               0.4-7      2014-02-24 [1] CRAN (R 4.1.2)
#>  gridExtra            * 2.3        2017-09-09 [2] CRAN (R 4.1.2)
#>  gridGraphics           0.5-1      2020-12-13 [1] CRAN (R 4.1.2)
#>  gridtext               0.1.4      2020-12-10 [2] CRAN (R 4.1.2)
#>  gtable                 0.3.0      2019-03-25 [3] CRAN (R 4.0.0)
#>  gtools               * 3.9.2      2021-06-06 [1] CRAN (R 4.1.2)
#>  hablar               * 0.3.0      2020-03-19 [1] CRAN (R 4.1.2)
#>  haven                  2.4.3      2021-08-04 [3] CRAN (R 4.1.0)
#>  here                 * 1.0.1      2020-12-13 [1] CRAN (R 4.1.2)
#>  highr                  0.9        2021-04-16 [3] CRAN (R 4.0.5)
#>  Hmisc                  4.6-0      2021-10-07 [1] CRAN (R 4.1.2)
#>  hms                    1.1.1      2021-09-26 [3] CRAN (R 4.1.1)
#>  hrbrthemes           * 0.8.0      2020-03-06 [2] CRAN (R 4.1.2)
#>  htmlTable              2.4.0      2022-01-04 [1] CRAN (R 4.1.2)
#>  htmltools              0.5.2      2021-08-25 [3] CRAN (R 4.1.1)
#>  htmlwidgets            1.5.4      2021-09-08 [2] CRAN (R 4.1.2)
#>  httpuv                 1.6.5      2022-01-05 [1] CRAN (R 4.1.2)
#>  httr                   1.4.2      2020-07-20 [3] CRAN (R 4.0.2)
#>  hutils               * 1.7.1      2021-07-22 [1] CRAN (R 4.1.2)
#>  igraph                 1.2.11     2022-01-04 [1] CRAN (R 4.1.2)
#>  insight                0.15.0     2022-01-07 [2] CRAN (R 4.1.2)
#>  IRanges              * 2.28.0     2021-10-26 [1] Bioconductor
#>  janitor              * 2.1.0      2021-01-05 [1] CRAN (R 4.1.2)
#>  jpeg                   0.1-9      2021-07-24 [2] CRAN (R 4.1.2)
#>  jquerylib              0.1.4      2021-04-26 [3] CRAN (R 4.0.5)
#>  jsonlite               1.8.0      2022-02-22 [1] CRAN (R 4.1.2)
#>  kableExtra           * 1.3.4      2021-02-20 [1] CRAN (R 4.1.2)
#>  KernSmooth             2.23-20    2021-05-03 [4] CRAN (R 4.0.5)
#>  knitr                  1.37       2021-12-16 [3] CRAN (R 4.1.2)
#>  labeling               0.4.2      2020-10-20 [3] CRAN (R 4.0.3)
#>  later                  1.3.0      2021-08-18 [2] CRAN (R 4.1.2)
#>  lattice                0.20-45    2021-09-22 [4] CRAN (R 4.1.1)
#>  latticeExtra           0.6-29     2019-12-19 [1] CRAN (R 4.1.2)
#>  lazyeval               0.2.2      2019-03-15 [2] CRAN (R 4.1.2)
#>  lifecycle              1.0.1      2021-09-24 [3] CRAN (R 4.1.1)
#>  limma                * 3.50.3     2022-04-07 [1] Bioconductor
#>  lubridate              1.8.0      2021-10-07 [3] CRAN (R 4.1.1)
#>  magrittr               2.0.3      2022-03-30 [1] CRAN (R 4.1.2)
#>  MASS                   7.3-55     2022-01-13 [4] CRAN (R 4.1.2)
#>  Matrix                 1.4-0      2021-12-08 [4] CRAN (R 4.1.2)
#>  MatrixGenerics         1.6.0      2021-10-26 [1] Bioconductor
#>  matrixStats            0.61.0     2021-09-17 [2] CRAN (R 4.1.2)
#>  memoise                2.0.1      2021-11-26 [1] CRAN (R 4.1.2)
#>  mgcv                   1.8-38     2021-10-06 [4] CRAN (R 4.1.1)
#>  mime                   0.12       2021-09-28 [3] CRAN (R 4.1.1)
#>  modelr                 0.1.8      2020-05-19 [3] CRAN (R 4.0.0)
#>  MsCoreUtils          * 1.6.2      2022-02-24 [1] Bioconductor
#>  munsell                0.5.0      2018-06-12 [3] CRAN (R 4.0.0)
#>  nlme                   3.1-155    2022-01-13 [4] CRAN (R 4.1.2)
#>  nnet                   7.3-17     2022-01-13 [4] CRAN (R 4.1.2)
#>  NormalyzerDE         * 1.12.0     2021-10-26 [1] Bioconductor
#>  nortest                1.0-4      2015-07-30 [1] CRAN (R 4.1.2)
#>  openxlsx             * 4.2.5      2021-12-14 [1] CRAN (R 4.1.2)
#>  patchwork              1.1.1      2020-12-17 [1] CRAN (R 4.1.2)
#>  pbapply              * 1.5-0      2021-09-16 [1] CRAN (R 4.1.2)
#>  pcaMethods             1.86.0     2021-10-26 [1] Bioconductor
#>  performance          * 0.8.0      2021-10-01 [2] CRAN (R 4.1.2)
#>  pheatmap               1.0.12     2019-01-04 [1] CRAN (R 4.1.2)
#>  pillar                 1.7.0      2022-02-01 [1] CRAN (R 4.1.2)
#>  pkgbuild               1.3.1      2021-12-20 [1] CRAN (R 4.1.2)
#>  pkgconfig              2.0.3      2019-09-22 [3] CRAN (R 4.0.0)
#>  pkgload                1.2.4      2021-11-30 [1] CRAN (R 4.1.2)
#>  plotly               * 4.10.0     2021-10-09 [2] CRAN (R 4.1.2)
#>  plyr                   1.8.6      2020-03-03 [1] CRAN (R 4.1.2)
#>  png                    0.1-7      2013-12-03 [1] CRAN (R 4.1.2)
#>  preprocessCore         1.56.0     2021-10-26 [1] Bioconductor
#>  prettyunits            1.1.1      2020-01-24 [3] CRAN (R 4.0.0)
#>  processx               3.5.2      2021-04-30 [3] CRAN (R 4.0.5)
#>  promises               1.2.0.1    2021-02-11 [2] CRAN (R 4.1.2)
#>  proxy                  0.4-26     2021-06-07 [2] CRAN (R 4.1.2)
#>  ps                     1.6.0      2021-02-28 [3] CRAN (R 4.0.4)
#>  purrr                * 0.3.4      2020-04-17 [3] CRAN (R 4.0.0)
#>  R6                     2.5.1      2021-08-19 [3] CRAN (R 4.1.1)
#>  raster                 3.5-15     2022-01-22 [1] CRAN (R 4.1.2)
#>  RcmdrMisc              2.7-2      2022-01-05 [1] CRAN (R 4.1.2)
#>  RColorBrewer         * 1.1-3      2022-04-03 [1] CRAN (R 4.1.2)
#>  Rcpp                   1.0.8      2022-01-13 [3] CRAN (R 4.1.2)
#>  RCurl                * 1.98-1.5   2021-09-17 [3] CRAN (R 4.1.1)
#>  readr                * 2.1.1      2021-11-30 [3] CRAN (R 4.1.2)
#>  readxl                 1.3.1      2019-03-13 [3] CRAN (R 4.0.0)
#>  remotes                2.4.2      2021-11-30 [1] CRAN (R 4.1.2)
#>  reprex                 2.0.1      2021-08-05 [3] CRAN (R 4.1.0)
#>  reshape                0.8.8      2018-10-23 [1] CRAN (R 4.1.2)
#>  reshape2               1.4.4      2020-04-09 [2] CRAN (R 4.1.2)
#>  rio                  * 0.5.29     2021-11-22 [1] CRAN (R 4.1.2)
#>  rlang                  1.0.2      2022-03-04 [1] CRAN (R 4.1.2)
#>  rmarkdown              2.14       2022-04-25 [1] CRAN (R 4.1.2)
#>  rpart                  4.1.16     2022-01-24 [1] CRAN (R 4.1.2)
#>  rprojroot              2.0.2      2020-11-15 [1] CRAN (R 4.1.2)
#>  rstatix                0.7.0      2021-02-13 [1] CRAN (R 4.1.2)
#>  rstudioapi             0.13       2020-11-12 [3] CRAN (R 4.0.3)
#>  Rttf2pt1               1.3.8      2020-01-10 [1] CRAN (R 4.1.2)
#>  rvest                  1.0.2      2021-10-16 [1] CRAN (R 4.1.2)
#>  S4Vectors            * 0.32.3     2021-11-21 [1] Bioconductor
#>  sandwich               3.0-1      2021-05-18 [1] CRAN (R 4.1.2)
#>  sass                   0.4.0      2021-05-12 [1] CRAN (R 4.1.2)
#>  scales                 1.2.0      2022-04-13 [1] CRAN (R 4.1.2)
#>  see                  * 0.6.8      2021-10-03 [2] CRAN (R 4.1.2)
#>  sessioninfo          * 1.2.2      2021-12-06 [1] CRAN (R 4.1.2)
#>  shiny                  1.7.1      2021-10-02 [1] CRAN (R 4.1.2)
#>  snakecase              0.11.0     2019-05-25 [1] CRAN (R 4.1.2)
#>  sp                     1.4-6      2021-11-14 [2] CRAN (R 4.1.2)
#>  statmod                1.4.36     2021-05-10 [1] CRAN (R 4.1.2)
#>  stringi                1.7.6      2021-11-29 [3] CRAN (R 4.1.2)
#>  stringr              * 1.4.0      2019-02-10 [3] CRAN (R 4.0.0)
#>  SummarizedExperiment   1.24.0     2021-10-26 [1] Bioconductor
#>  survival               3.2-13     2021-08-24 [4] CRAN (R 4.1.1)
#>  svglite                2.0.0      2021-02-20 [3] CRAN (R 4.0.4)
#>  systemfonts            1.0.3      2021-10-13 [3] CRAN (R 4.1.1)
#>  terra                  1.5-21     2022-02-17 [1] CRAN (R 4.1.2)
#>  testthat               3.1.2      2022-01-20 [1] CRAN (R 4.1.2)
#>  textshaping            0.3.6      2021-10-13 [1] CRAN (R 4.1.2)
#>  tibble               * 3.1.6      2021-11-07 [3] CRAN (R 4.1.2)
#>  tictoc               * 1.0.1      2021-04-19 [2] CRAN (R 4.1.2)
#>  tidyr                * 1.2.0      2022-02-01 [1] CRAN (R 4.1.2)
#>  tidyselect             1.1.2      2022-02-21 [1] CRAN (R 4.1.2)
#>  tidytree               0.3.9      2022-03-04 [1] CRAN (R 4.1.2)
#>  tidyverse            * 1.3.1      2021-04-15 [3] CRAN (R 4.0.5)
#>  treeio                 1.18.1     2021-11-14 [1] Bioconductor
#>  treemap              * 2.4-3      2021-08-22 [1] CRAN (R 4.1.2)
#>  tzdb                   0.2.0      2021-10-27 [3] CRAN (R 4.1.1)
#>  usethis                2.1.5      2021-12-09 [1] CRAN (R 4.1.2)
#>  utf8                   1.2.2      2021-07-24 [3] CRAN (R 4.1.0)
#>  vctrs                  0.4.1      2022-04-13 [1] CRAN (R 4.1.2)
#>  vipor                  0.4.5      2017-03-22 [1] CRAN (R 4.1.2)
#>  viridisLite            0.4.0      2021-04-13 [3] CRAN (R 4.0.5)
#>  vroom                  1.5.7      2021-11-30 [3] CRAN (R 4.1.2)
#>  vsn                    3.62.0     2021-10-26 [1] Bioconductor
#>  webshot                0.5.2      2019-11-22 [1] CRAN (R 4.1.2)
#>  withr                  2.5.0      2022-03-03 [1] CRAN (R 4.1.2)
#>  xfun                 * 0.31       2022-05-10 [1] CRAN (R 4.1.2)
#>  xml2                   1.3.3      2021-11-30 [3] CRAN (R 4.1.2)
#>  xtable                 1.8-4      2019-04-21 [1] CRAN (R 4.1.2)
#>  XVector              * 0.34.0     2021-10-26 [1] Bioconductor
#>  yaml                   2.2.1      2020-02-01 [3] CRAN (R 4.0.0)
#>  yulab.utils            0.0.4      2021-10-09 [1] CRAN (R 4.1.2)
#>  zip                    2.2.0      2021-05-31 [1] CRAN (R 4.1.2)
#>  zlibbioc               1.40.0     2021-10-26 [1] Bioconductor
#>  zoo                    1.8-10     2022-04-15 [1] CRAN (R 4.1.2)
#> 
#>  [1] /home/benjamin/R/x86_64-pc-linux-gnu-library/4.1
#>  [2] /usr/local/lib/R/site-library
#>  [3] /usr/lib/R/site-library
#>  [4] /usr/lib/R/library
#> 
#> ──────────────────────────────────────────────────────────

References

  1. Drummond, D. A., Raval, A. & Wilke, C. O. A single determinant dominates the rate of yeast protein evolution. Mol. Biol. Evol. 23, 327–337 (2006).
  2. Drummond, D. A. & Wilke, C. O. Mistranslation-induced protein misfolding as a dominant constraint on coding-sequence evolution. Cell 134, 341–352 (2008).
  3. Drummond, D. A., Bloom, J. D., Adami, C., Wilke, C. O. & Arnold, F. H. Why highly expressed proteins evolve slowly. Proc. Natl. Acad. Sci. U. S. A. 102, 14338–14343 (2005).
  4. Pal, C., Papp, B. & Hurst, L. D. Highly expressed genes in yeast evolve slowly. Genetics 158, 927–931 (2001).
  5. Jimenez, M. J., Arenas, M. & Bastolla, U. Substitution rates predicted by stability-constrained models of protein evolution are not consistent with empirical data. Mol. Biol. Evol. (2017). doi:10.1093/molbev/msx327
  6. Schavemaker, P. E., Śmigiel, W. M. & Poolman, B. Ribosome surface properties may impose limits on the nature of the cytoplasmic proteome. Elife 6, (2017).
  7. Yang, J. R., Liao, B. Y., Zhuang, S. M. & Zhang, J. Z. Protein misinteraction avoidance causes highly expressed proteins to evolve slowly. Proc. Natl. Acad. Sci. U. S. A. 109, E831–E840 (2012).
  8. Plata, G. & Vitkup, D. Avoidance of toxic misfolding and protein stability do not explain the sequence constraints of highly expressed proteins. Mol. Biol. Evol. (2017). doi:10.1093/molbev/msx323

  1. Weizmann Institue of Science, https://github.com/benjamin-elusers/↩︎

  2. Universite de Strasbourg (CNRS), https://github.com/elielink/↩︎